在结构体中定义函数指针.docx
文本预览下载声明
结构体中定义函数指针 分类: /lynnlycs/article/category/1369079C/C++ 2013-08-12 12:51 2581人阅读 /lynnlycs/article/details/9922437评论(1) javascript:void(0);收藏 /lynnlycs/article/details/9922437举报 转自:/unix21/article/details/9293877结构体指针变量的定义,定义结构体变量的一般形式如下:形式1:先定义结构体类型,再定义变量struct结构体标识符{成员变量列表;…};struct 结构体标识符 *指针变量名;变量初始化一:struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };形式2:在定义类型的同时定义变量struct结构体标识符{成员变量列表;…} *指针变量名;变量初始化二:形式3:直接定义变量,用无名结构体直接定义变量只能一次struct?{成员变量列表;…}*指针变量名;其中“指针变量名”为结构体指针变量的名称。形式1是先定义结构体,然后再定义此类型的结构体指针变量;形式2和形式3是在定义结构体的同时定义此类型的结构体指针变量。函数指针的定义 一般的函数指针可以这么定义: int(*func)(int,int); 表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针. 假如存在这样的一个函数: int add2(int x,int y) { return x+y; } 那么在实际使用指针func时可以这样实现: func=add2; //指针赋值,或者func=add2; add2与add2意义相同 printf(func(3,4)=%d\n,func(3,4)); 事实上,为了代码的移植考虑,一般使用typedef定义函数指针类型. typedef int(*FUN)(int,int); FUN func=add2; func();结构体中包含函数指针其实在结构体中,也可以像一般变量一样,包含函数指针变量.下面是一种简单的实现.[cpp] /lynnlycs/article/details/9922437view plain/lynnlycs/article/details/9922437copy/lynnlycs/article/details/9922437print/lynnlycs/article/details/9922437?#include?stdio.h?struct?DEMO??{??int?x,y;??int?(*func)(int,int);?//函数指针?};???int?add1(int?x,int?y)??{??return?x*y;??}???int?add2(int?x,int?y)??{??return?x+y;??}???void?main()??{??struct?DEMO?demo;??demo.func=add2;?//结构体函数指针赋值?//demo.func=add2;?//结构体函数指针赋值?printf(func(3,4)=%d\n,demo.func(3,4));??demo.func=add1;??printf(func(3,4)=%d\n,demo.func(3,4));??}???/*?输出:?func(3,4)=7?func(3,4)=12?*/??结构体中指向函数的指针?C语言中的struct是最接近类的概念,但是在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。举个例子,如下:[cpp] /lynnlycs/article/details/9922437view plain/lynnlycs/article/details/9922437copy/lynnlycs/article/details/9922437print/lynnlycs/article/details/9922437?#include?stdio.h?#include?stdlib.h?#include?string.h??typedef?struct?student??{???int?id;???char?name[50];?void?(*initial)();???void?(*process)(int?id,?char?*name);???void?(*destroy)();??}stu;???void?initial()??{???printf(initialization...\n);??}???void?process(int?id,?char?*name)??{???printf(process
显示全部