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

相关推荐
编程小白gogogo7 分钟前
苍穹外卖图片不显示解决教程
java·spring boot
舟舟亢亢13 分钟前
算法总结——二叉树【hot100】(上)
java·开发语言·算法
百锦再35 分钟前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
星辰徐哥1 小时前
C语言网络编程入门:socket编程、TCP/IP协议、客户端与服务器通信的实现
c语言·网络·tcp/ip
努力努力再努力wz1 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
w8x9y0z12 小时前
大小端转换的隐藏陷阱:为什么你的网络数据传输总是出错?
c语言·网络编程·大小端·数据序列化
daxi1502 小时前
C语言从入门到进阶——第9讲:函数递归
c语言·开发语言·c++·算法·蓝桥杯
yy.y--3 小时前
Java数组逆序读写文件实战
java·开发语言
BD_Marathon4 小时前
IDEA创建多级包时显示在同一行怎么办
java·ide·intellij-idea
亓才孓4 小时前
【Exception】CONDITIONS EVALUATION REPORT条件评估报告
java·开发语言·mybatis