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

相关推荐
SimonKing1 分钟前
每天白送4000万Token!这款“龙虾”AI神器,微信就能操控电脑
java·后端·程序员
zhixingheyi_tian1 分钟前
hdfs.c 之解析
c语言·hadoop·hdfs
橘子编程6 分钟前
编程语言全指南:从C到Rust
java·c语言·开发语言·c++·python·rust·c#
艾莉丝努力练剑8 分钟前
【Linux线程】Linux系统多线程(三):Linux线程 VS 进程,线程控制
java·linux·运维·服务器·c++·学习·ubuntu
小白天下第一17 分钟前
java+三角测量(两个工业级)+人体3d骨骼关键点获取(yolov8+HRNET_w48_2d)
java·yolo·3d·三角测量
独小乐20 分钟前
007.GNU C内联汇编杂谈|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·汇编·单片机·嵌入式硬件·arm·gnu
笨笨饿23 分钟前
42_C语言查找算法
linux·服务器·c语言·人工智能·mcu·学习方法·嵌入式软件
计算机安禾24 分钟前
【数据结构与算法】第33篇:交换排序(二):快速排序
c语言·开发语言·数据结构·数据库·算法·矩阵·排序算法
William Dawson26 分钟前
Java 后端高频 20 题超详细解析 ①
java·开发语言
编程之升级打怪33 分钟前
Java NIO的简单封装
java·开发语言·nio