函数指针
函数指针是指向函数的指针变量。
通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。
函数指针可以像一般函数一样,用于调用函数、传递参数。
函数指针变量的声明:
typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型
实例
以下实例声明了函数指针变量 p,指向函数 max:
实例
编译执行,输出结果如下:
请输入三个数字:1 2 3 最大的数字是: 3
回调函数
函数指针作为某个函数的参数
函数指针变量可以作为某个函数的参数来使用的,回调函数就是一个通过函数指针调用的函数。
简单讲:回调函数是由别人的函数执行时调用你实现的函数。
以下是来自知乎作者常溪玲的解说:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
实例
实例中 populate_array 函数定义了三个参数,其中第三个参数是函数的指针,通过该函数来设置数组的值。
实例中我们定义了回调函数 getNextRandomValue,它返回一个随机值,它作为一个函数指针传递给 populate_array 函数。
populate_array 将调用 10 次回调函数,并将回调函数的返回值赋值给数组。
实例
编译执行,输出结果如下:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709
ElleryQ
844***495@qq.com
参考地址
有关于 size_t:
size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned。这里使用 size_t 是为了保证 arraysize 变量能够有足够大的容量来储存可能大的数组。
ElleryQ
844***495@qq.com
参考地址
fwfdjq23
fwf***23@163.com
size_t 类型在C语言标准库函数原型使用的很多,数值范围一般是要大于int和unsigned.
但凡不涉及负值范围的表示size取值的,都可以用size_t;比如array[size_t]。
size_t 在stddef.h头文件中定义。
在其他常见的宏定义以及函数中常用到有:
1,sizeof运算符返回的结果是size_t类型;
2,void *malloc(size_t size)...
fwfdjq23
fwf***23@163.com
钢板
sim***php@163.com
更标准写法 GCC 直接能过,指针变量用指针变量的方式处理。
钢板
sim***php@163.com
神奇杨半仙
227***4534@qq.com
引用这段话:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
可以这样理解,号码就是回调函数的名称,手机就是函数指针,有手机有了号码,就可以进行回调。
神奇杨半仙
227***4534@qq.com
码农程序员
a74***7961@qq.com
补充下带参的回调函数:
码农程序员
a74***7961@qq.com
栗子
and***_e@163.com
参考地址
关于回调函数的一点思考
在 A 函数中将参数与 C 函数传递给 B 函数,B函数调用 C 函数;B 函数调用的动作称为回调,C 函数称为回调函数。
举栗
执行结果:
仔细想想回调函数的作用完全可以通过普通函数来达到,其实回调函数最大的意义在于解耦,降低了代码之间的耦合度。
栗子
and***_e@163.com
参考地址
jave.lin
lin***008@126.com
关于 size_t,我在:vcruntime.h 看到如下定义:
也就是说会判断你的机器是否 64 位,如果是:
如果不是:
所以总结得说,就是根据系统位数来或是对应的 64 位 int 还是 32 位的 int。
jave.lin
lin***008@126.com