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

相关推荐
ym hyd 11112 小时前
试题库管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
李永奉12 小时前
C语言-指针函数与函数指针及回调函数的使用
c语言·开发语言
AC赳赳老秦12 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
钱栈up12 小时前
mvn compile 卡死在 javac 阶段:一次类型不匹配的排查与修复
java·开发语言
杨丰玮41812 小时前
C语言基础知识(一)————各类符号的含义与输入输出库(stdio)
c语言·开发语言
水饺编程13 小时前
第1章,了解乌班图环境,使用浏览器和邮箱
c语言·汇编·ubuntu
吠品14 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
步行cgn14 小时前
Spring 全注解开发详解
java·后端·spring
长河14 小时前
Java的GC(垃圾回收)中,标记无用对象的核心方法是可达性分析算法
java·jvm·算法
code2cat15 小时前
Java进阶篇之LongAdder:把统计更新分散,再读取总和
java·并发编程·原子类·longadder