函数指针(对于4.2.6的补充)
函数指针的类型一般这样定义
返回值类型 (*函数指针)(参数类型)
这边的参数类型有时候我们经常使用const void*因为这个void类型的指针的兼容性非常好,void类型的指针可以强制转化成其他类型的指针,非常方便
因为函数再编译的过程中函数名其实最后就是通过将其转化为函数的地址来实现的因此通过(*函数指针)(参量)
的效果等价于函数指针(参量)
eg:
int (*f)(int a, int b) = sum;
关于函数指针数组
eg:
int (*f[2])(int a, int b) = {sum, sum};
函数指针数组的调用如下
点击查看代码
int (*f[2])(int a, int b);
f[1] = sum;
printf("%d\n", f[1](1, 2));
其实质只是将函数指针转化成函数指针数组,也就是说可以同时调用多个函数了
注意:
int* p[5]
定义的是指针数组
int (*p)[5]
定义的是数组指针,数组指针是一个指向数组的指针,注意该指针指向的只能是一维数组,如果是多维数组就应该有多个数组指针,因此他又被称作行指针
eg:
点击查看代码
int a[10] = {1, 2, 3};
int (*b)[10];
b = &a;
调用的方法如下
点击查看代码
int (*a)[10];
int b[10] = {1, 2, 3};
a = &b;
printf("%d\n", (*a)[1]);
eg:
点击查看代码
int ((* (*f)[2])(int a, int b));
int (*x[2])(int a, int b);
f = &x;
*(*f) = sum;
(*f)[0] = sum;
printf("%d\n", (*x)(1, 2));
注意:函数指针数组指针定义出来以后本身是一个指针,他并没有分配出来给函数指针数组的空间,因此不能将函数直接赋值给他,而应该自己再定义一个函数指针数组,再将函数指针数组所在的地址发送给他才可以
如果不理解的话,可以先通过数组指针和指针数组来辅助理解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)