博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++函数指针
阅读量:6432 次
发布时间:2019-06-23

本文共 1658 字,大约阅读时间需要 5 分钟。

为了复试,重新从零翻开了一遍C++程序设计基础,看到函数指针,才想到这个地方我一开始学的时候就没学懂,趁这次机会把它搞懂。直接上代码,注释很详细:

#include 
using namespace std;typedef int (*funType)(int, int);typedef int funType2(int, int);typedef int *(*pfunType)(int, int);typedef int *(pfunType2)(int, int);int funA(int a, int b){ cout << "调用了 int funA()" << endl; return a + b;}int *funB(int a, int b){ cout << "调用了int *funB()" << endl; int *p = new int; *p = a - b; return p;}void callFunA(funType* cfun, int a, int b)//这里传递的是funType类型的指针{ cout << (*cfun)(a, b) << endl;// ok,这里是解指针调用 //cout << cfun(a, b) << endl; //error 明显调用表达式前的括号必须具有(指针)函数类型}void callFunA2(funType cfun, int a, int b)//这里传递的是funType类型变量{ cout << (*cfun)(a, b) << endl;//ok,这里是解指针调用 cout << cfun(a, b) << endl;//ok,这里直接调用}void callFunB(pfunType* pcfun, int a, int b){ int *p = (*pcfun)(a, b); //int *p = pcfun(a, b);//error 明显调用表达式前的括号必须具有(指针)函数类型 cout << *p<< endl; delete p;}void callFunB2(pfunType2 pcfun, int a, int b){ int *p1 = (*pcfun)(a, b);//ok int *p2 = pcfun(a, b);//ok cout << *p1 << endl; cout << *p2 << endl; delete p1; delete p2;}int main(){ int a = 5, b = 8; funType fT = funA; //ok //funType* fT_p = &funA;//error 类型参数不兼容 //funType2 fT2 = funA;//error 未能初始化fT2,怎么能初始化fT2?,难道funType2 就不能用来声明函数对象? pfunType pfT = funB;//0k //pfunType2 pfT2 = funB;//error 同fT2 callFunA(&fT, a, b);//0k //callFunA(funA, a, b);//error 类型参数不兼容,尝试直接传递funA函数入口地址失败 callFunA2(fT, a, b);//ok callFunB(&pfT, a, b);//ok //callFunB(funB, a, b);//error 类型参数不兼容 callFunB2(pfT, a, b);//ok callFunB2(funB, a, b);//ok system("pause"); return 0;}
posted on
2019-03-17 09:57 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/wangzhizhen/p/10545731.html

你可能感兴趣的文章
我的友情链接
查看>>
使用List的remove方法需要的注意的问题
查看>>
Ansible的介绍、安装、配置及常用模块介绍
查看>>
编码列表
查看>>
eigrp 配置
查看>>
谈一谈 redis 集群
查看>>
concurrent包
查看>>
分区和格式化硬盘
查看>>
在Linux下调试Python代码的各种方法
查看>>
centos7塔建MQ服务器
查看>>
Peer authentication failed for user
查看>>
超强的.NET图像工具包VintaSoftImaging.NET SDK更新至v8.6丨75折优惠
查看>>
阿里云上Kubernetes集群联邦
查看>>
我的Git忽略文件
查看>>
Java基础学习总结(8)——super关键字
查看>>
我的友情链接
查看>>
lmis的一些表
查看>>
Xcode的Instruments检测内存泄露方法(Leaks)
查看>>
n个矩阵连乘问题
查看>>
带权树的最短最长问题
查看>>