c语言中“函数指针”

变量有地址,数组有地址,那么函数是否有地址呢?

int Add(int x,int y){

return x+y;

}

int main()

{

pritnf("%p\n",&Add);

pritnf("%p\n",Add); //&函数名和函数名都是函数的地址,没有区别。

return 0;

}

若是想存放起来:int (*pf)(int,int) = &Add; //pf**:函数指针变量**。

去掉名字:则就是函数指针pf类型:int (*)(int,int) 函数指针类型。

若是:

int (*pf)(int,int)=Add;

int ret=(*pf)(4,5); // *可写可不写,对其没有影响。写的话必须带上小括号

pritnf("%d\n",ret);

例题:

int mian()

{

(*(void)(*) ( ) ) 0 ( );

return 0;

}

其中的 (*(void)(*) ( ) ) 0 ( );是什么意思?

由此可见函数指针类型是:void (*)( ) ,这是强制类型转换。例如int (3.14)

也是一次函数调用 ,调用0的地址存放的那个函数。

0地址出放的这个函数是没有参数的,返回类型是void.

例题:

void (*signal (int,void(*) (int) ) ) (int);

signal:函数名,跟圆括号结合了。

(int,void(*) (int) ) 是函数参数,整形,一种函数指针类型 ,可接收一函数地址。

剩下的就是返回类型,void(*)(int)--函数指针类型

该函数指向函数参数int ,返回类型void.

函数定义:

int Add(int x,int y)

{

return x+y;

}

函数调用:Add(3,5);

函数声明:int Add(int,int);

相关推荐
消失的旧时光-19431 小时前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
BD_Marathon1 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
VT.馒头2 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
BD_Marathon2 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
Coder_Boy_2 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
css趣多多2 小时前
add组件增删改的表单处理
java·服务器·前端
雨中飘荡的记忆2 小时前
Spring Batch实战
java·spring
Java后端的Ai之路2 小时前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway
devmoon2 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
野犬寒鸦2 小时前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习