#include"stdio.h" void fun(int x) { printf("函数指针%d/n",x); } struct node{ char name[20]; int prob; void (*f)(int x);//函数指针 }; void main() { //方法1 struct node xiaobo={ .name = "xiaobo", .prob = 0, .f = fun, }; printf("%s**,%d",xiaobo.name,xiaobo.prob); xiaobo.f(0); //方法2 struct node xiaobo1={"xiaobo1",1,fun}; printf("%s**,%d",xiaobo1.name,xiaobo1.prob); xiaobo1.f(1); //方法3 struct node xiaobo2={ name:"xiaobo2", prob:2, }; printf("%s**,%d",xiaobo2.name,xiaobo2.prob); struct node *xiaobo3; xiaobo3 = malloc(sizeof(struct node)); memset(xiaobo3,0,sizeof(*xiaobo3));//memset给结构题清0 printf("memset 初始化结果:/n"); printf("**%s**,%d**/n",(*xiaobo3).name,(*xiaobo3).prob); strcpy((*xiaobo3).name,"xiaobo3");//c语言在定义字符数组的时候才能使用=来初始化字符数组,char s[20] = "xiaobo3" (*xiaobo3).prob = 3; //memset(xiaobo3,0,sizeof(*xiaobo3)); printf("赋值初始后:/n"); printf("**%s**,%d**/n",(*xiaobo3).name,(*xiaobo3).prob); (*xiaobo3).f = fun; (*xiaobo3).f(3); //system("pause"); } /* 输出结果 xiaobo**,0函数指针0 xiaobo1**,1函数指针1 xiaobo2**,2memset 初始化结果: ****,0** 赋值初始后: **xiaobo3**,3** 函数指针3 */