引用这段话:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
可以这样理解,号码就是回调函数的名称,手机就是函数指针,有手机有了号码,就可以进行回调。
更标准写法 GCC 直接能过,指针变量用指针变量的方式处理。
#include <stdlib.h> #include <stdio.h> // 回调函数 void populate_array(int *array, int arraySize, int (*getNextValue)(void)) { int i; for(i=0; i<arraySize; i++){ *(array+i) = getNextValue(); } } // 获取随机值 int getNextRandomValue(void) { return rand(); } int main(void) { int myarray[10]; int i; populate_array(myarray, 10, getNextRandomValue); for(i=0; i<10; i++) { printf("%d ", myarray[i]); } printf("\n"); return 0; }
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)...
有关于 size_t:
size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned。这里使用 size_t 是为了保证 arraysize 变量能够有足够大的容量来储存可能大的数组。
2016 年接触 C 语言 ,当年愣是看不懂!尤其是指针,到现在 2 年多了,有点小理解。回顾一下,一说到指针就会说到地址的概念,所以跟指针有关的概念,跟 C 的内存管理结合起来理解会更好点,下面说说如何更好的理解指针。
为什么叫指针,指针其实是一种很形象的比喻,下面说说我的个人理解。
int 变量存的是 int 型的值,char 变量存的是 char 型的值,而指针,它是一种特殊的变量,存的是内存地址,按照这个模板可以把它理解为:“内存地址变量” 存的是 “内存地址”,等价于:“指针变量” 存的是 “内存地址”
操作系统进行资源调度时,会根据这些变量存的地址去请求和使用那个地址代表的内存区域,这就仿佛像是这个变量存的地址指向了某片内存,人们用 “指针” 来统称所谓的 “内存地址变量”
因此,任何跟指针有关的概念,都可以联系内存地址加以理解,二者必然有联系,数组与指针,函数与指针,都是如此。
像 int * 存 int 型变量的地址,char * 存 char 型的地址,那指针理所当然可以存指针变量的地址啊。
例如,int ** 存 int * 的地址,int *** 存 int ** 的地址。
这就是一个二级指针存一级指针的地址,三级指针存二级指针的地址,人们把这样的过程叫指向指针的指针,但其实也就是一个上一级的指针存了下一级的指针的地址而已。
因此,像上面说的,你存了它的地址,你就是指向它,所以:
个人认为指针可以说是 C 的最伟大的特性,通过这样的一个模型可以形象地管理部分内存!
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1514C 函数指针与回调函数
引用这段话:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
可以这样理解,号码就是回调函数的名称,手机就是函数指针,有手机有了号码,就可以进行回调。
1513C 函数指针与回调函数
更标准写法 GCC 直接能过,指针变量用指针变量的方式处理。
1512C 函数指针与回调函数
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)...
1511C 函数指针与回调函数
有关于 size_t:
size_t 是一种数据类型,近似于无符号整型,但容量范围一般大于 int 和 unsigned。这里使用 size_t 是为了保证 arraysize 变量能够有足够大的容量来储存可能大的数组。
1510C 指针
2016 年接触 C 语言 ,当年愣是看不懂!尤其是指针,到现在 2 年多了,有点小理解。回顾一下,一说到指针就会说到地址的概念,所以跟指针有关的概念,跟 C 的内存管理结合起来理解会更好点,下面说说如何更好的理解指针。
为什么叫指针,指针其实是一种很形象的比喻,下面说说我的个人理解。
int 变量存的是 int 型的值,char 变量存的是 char 型的值,而指针,它是一种特殊的变量,存的是内存地址,按照这个模板可以把它理解为:“内存地址变量” 存的是 “内存地址”,等价于:“指针变量” 存的是 “内存地址”
操作系统进行资源调度时,会根据这些变量存的地址去请求和使用那个地址代表的内存区域,这就仿佛像是这个变量存的地址指向了某片内存,人们用 “指针” 来统称所谓的 “内存地址变量”
因此,任何跟指针有关的概念,都可以联系内存地址加以理解,二者必然有联系,数组与指针,函数与指针,都是如此。
像 int * 存 int 型变量的地址,char * 存 char 型的地址,那指针理所当然可以存指针变量的地址啊。
例如,int ** 存 int * 的地址,int *** 存 int ** 的地址。
这就是一个二级指针存一级指针的地址,三级指针存二级指针的地址,人们把这样的过程叫指向指针的指针,但其实也就是一个上一级的指针存了下一级的指针的地址而已。
因此,像上面说的,你存了它的地址,你就是指向它,所以:
个人认为指针可以说是 C 的最伟大的特性,通过这样的一个模型可以形象地管理部分内存!