C语言详解函数与指针的使用
目录
一、函数类型二、函数指针三、回调函数四、小结一、函数类型
C 语言中的函数有自己特定的类型
函数的类型由返回值,参数类型和参数个数共同决定,如 int add(int i, int j)的类型为 int(int, int)
C 语言中通过 typedef 为函数类型重命名
typedef type name(parameter list)
如
typedef int f(int, int);
typedef void p(int);
二、函数指针
函数指针用于指向一个函数
函数名是执行函数体的入口地址
可通过函数类型定义函数指针:FuncType* pointer;
也可以直接定义: type (*pointer)(parameter list);
pointer 为函数指针变量名type为所指函数的返回值类型parameter list 为所指函数的参数类型列表下面看一个函数指针使用的代码:
#includetypedef int(FUNC)(int); int test(int i) { return i * i; } void f() { printf("Call f()...\n"); } int main() { FUNC* pt = test; void(*pf)() = &f; printf("pf = %p\n", pf); printf("f = %p\n", f); printf("&f = %p\n", &f); pf(); (*pf)(); printf("Function pointer call: %d\n", pt(2)); return 0; }
输出结果如下:
注意:
1.FUNC* pt = test; 是合法的,test 这个函数名代表的是函数的入口地址,
2.对于函数名来说,取不取地址没有区别,例如上面代码中的 FUNC* pt = test; 也可以写成FUNC* pt = &test;
3.(*pf)(); 相当于 f();
如果我们把void(*pf)() = &f; 改成void(*pf)() = 0x8048400; 直接利用函数指针跳转到 0x8048400 这个地址来执行,结果照样也能正常输出:
面试小问题:如何使用 C 语言直接跳转到某个固定的地址开始执行?
答案:通过函数指针
三、回调函数
回调函数是利用函数指针实现的一种调用机制
回调机制原理
调用者不知道具体事件发生时需要调用的具体函数被调函数不知道何时被调用,只知道需要完成的任务当具体事件发生时,调用者通过函数指针调用具体函数回调机制中的调用者和被调函数互不依赖
下面看一个回调函数的使用示例:
#includetypedef int(*Weapon)(int); void fight(Weapon wp, int arg) { int result = 0; printf("Fight boss!\n"); result = wp(arg); printf("Boss loss: %d\n", result); } int knife(int n) { int ret = 0; int i = 0; for(i=0; i 输出结果如下:
四、小结
C 语言中的函数都有特定的类型可以使用函数类型定义函数指针函数指针是实现回调机制的关键技术通过函数指针可以在 C 程序中实现固定地址跳转到此这篇关于C语言详解函数与指针的使用的文章就介绍到这了,更多相关C语言 函数与指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?