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);

相关推荐
StevenLdh16 分钟前
第四期 · 云端同步与冲突仲裁:离线可写、多端一致的工程解法
java·微信小程序
Rabitebla16 分钟前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
事已至此先睡覺吧26 分钟前
第三篇:Java 流程控制详解:条件判断、循环与跳转语句
java·开发语言
毕业设计70327 分钟前
(免费领源码) SpringBoot 游戏交易平台17600-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·spring boot·mysql·决策树·mybatis·idea·推荐算法
一 乐34 分钟前
自习室座位预约管理系统|基于springboot + vue自习室座位预约管理系统(源码+数据库+文档)
java·vue.js·spring boot
此时不提桶,更待何时1 小时前
02-02-B-AQS与JUC锁面试与生产事故实战
java
音符犹如代码1 小时前
Kafka 接入 AI 的三条路线:MCP 提案、会话记忆与实时上下文
java·大数据·ai·kafka
vx_BS813301 小时前
【项目编号:project51629】Spring Boot 乡村自来水缴费系统:把抄表、水费生成与在线缴费做成一条数字化闭环
java·spring boot·eclipse·tomcat·maven
qq_269506751 小时前
第29课-Servlet基础
java
毅炼1 小时前
不写多语言 SDK,怎么让 Python、Go、Node 服务接入注册中心?
java·后端·系统架构·gateway