首页 > 代码库 > C语言 函数指针的应用
C语言 函数指针的应用
简单的介绍下C语言函数指针的用法。
函数指针的声明:
char (* FunPtr)(char); 或者char (* FunPtr)(char ch); (声明类型个形参类型根据实际情况更改)
例:
1 #include"stdio.h" 2 3 char myFun(char ch) 4 { 5 printf("myFun is called, your char is %c.\n",ch); 6 return ‘w‘; 7 } 8 9 void main()10 {11 char temp;12 13 char (* funPtr)(char); //定义一个函数指针14 funPtr=myFun; //将myFun的地址给funPtr15 temp=funPtr(‘s‘); //此时可以认为对funPtr的调用就等同于对myFun的调用16 17 printf("return value: %c\n",temp);18 printf("size of myFun: %d\n",sizeof(funPtr));19 }
结果:
myFun is called, your char is s.
return value: w
size of myFun: 4
也可以将函数的定义放到结构体中,通过结构体成员变量来调用。
例:
1 #include"stdio.h" 2 3 typedef struct{ 4 char (* funPtr)(char); //定义一个函数指针 5 }myFunStruct_t; 6 7 char myFun(char ch) 8 { 9 printf("myFun is called, your char is %c.\n",ch);10 return ‘w‘;11 }12 13 void main()14 {15 char temp;16 17 myFunStruct_t myFunStruct;18 myFunStruct.funPtr=myFun; //将myFun的地址给funPtr19 temp=myFunStruct.funPtr(‘s‘); //此时可以认为对funPtr的调用就等同于对myFun的调用20 21 printf("return value: %c\n",temp);22 printf("size of myFunStruct_t: %d\n",sizeof(myFunStruct_t));23 }
结果:
myFun is called, your char is s.
return value: w
size of myFunStruct_t: 4
或者来点更高级的玩法,
例:
1 #include"stdio.h" 2 3 typedef void (* funInPtr_t)(void); //函数原型定义 4 typedef void (* funOutPtr_t)(void); 5 6 typedef struct{ 7 funInPtr_t funInPtr; 8 }myInStruct_t; 9 10 typedef struct{11 funOutPtr_t funOutPtr;12 myInStruct_t myInStruct;13 }myOutStruct_t;14 15 void myInFun(void)16 {17 printf("myInFun\n");18 }19 20 void myOutFun(void)21 {22 printf("myOutFun\n");23 }24 25 void main()26 {27 myOutStruct_t myOutStruct;28 myOutStruct.funOutPtr=myOutFun;29 myOutStruct.myInStruct.funInPtr=myInFun;30 31 myOutStruct.funOutPtr(); //外层函数32 myOutStruct.myInStruct.funInPtr(); //内层函数33 34 printf("size of myInStruct_t: %d\n",sizeof(myInStruct_t));35 printf("size of myOutStruct_t: %d\n",sizeof(myOutStruct_t));36 }
结果:
myOutFun
myInFun
size of myInStruct_t: 4
size of myOutStruct_t: 8
是不是像某些语言里的“一点到底”?
C语言的指针就是这么任性!
C语言 函数指针的应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。