2024-09-01
C/C++
00

函数指针:定义一个指针,然后将函数地址赋值给这个指针,指针就等同于函数。

c
#include <stdio.h> int max(int x, int y) { return x > y ? x : y; } int main(void) { int (* p)(int, int) = & max; // &可以省略 printf("最大的数字是: %d\n", p(2,3)); return 0; }

回调函数就是一个通过函数指针调用的函数:编写一个函数,另一个函数可以用这个函数当参数。下面中excutef就是回调函数。

c
#include <stdio.h> #include <stdlib.h> int max( int x, int y ) { return(x > y ? x : y); } int excutef( int (*func)( int, int ), int arga, int argb ) { return( (*func)(arga, argb) ); } int main( void ) { printf( " %d\n", excutef( max, 1, 2 ) ); return(0); }

把函数指针装入数组,然后调用:

c
#include <stdio.h> int max(int x, int y) { return x > y ? x : y; } int min(int x, int y) { return x < y ? x : y; } int main(void) { int (*p[2])(int, int)={&max,&min}; printf("%d %d \n", p[0](2,3),p[1](2,3)); return 0; }

当结构体和函数指针在一起,就会产生很多东西。

c
#include <stdio.h> #include <stdlib.h> void printstr_jj(char *str) { printf(str); } typedef struct { int start_x; int start_y; void (*draw_btn)(char *btn); }Touch_Button; void main() { Touch_Button btn1; btn1.draw_btn=printstr_jj; btn1.draw_btn("test"); }

当结构体和函数指针在一起,就会产生很多东西。再加个数组。2

c
#include <stdio.h> #include <stdlib.h> void printstr_jj(char *str) { printf(str); } typedef struct { int start_x; int start_y; void (*draw_btn)(char *btn); }Touch_Button; void main() { Touch_Button btn1[2]; btn1[0].draw_btn= printstr_jj; btn1[1].draw_btn= printstr_jj; btn1[0].draw_btn("test1"); btn1[1].draw_btn("test2"); }

当结构体和函数指针在一起,就会产生很多东西。再加个数组。3

c
#include <stdio.h> #include <stdlib.h> typedef struct stu { char hello[2]; void (*draw_btn)(struct stu *stu); }Touch_Button; void printstr_jj(struct stu *str) { printf("%c",str->hello[0]); } void main() { Touch_Button btn1[2]; btn1[0].hello[0]='1'; btn1[0].hello[1]='1'; btn1[1].hello[0]='2'; btn1[1].hello[1]='2'; btn1[0].draw_btn= printstr_jj; btn1[1].draw_btn= printstr_jj; btn1[0].draw_btn(&btn1[0]); btn1[1].draw_btn(&btn1[1]); }
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!