c结构体中的函数指针与函数

c结构体中的函数指针与函数

ID:13350167

大小:29.50 KB

页数:5页

时间:2018-07-22

c结构体中的函数指针与函数_第1页
c结构体中的函数指针与函数_第2页
c结构体中的函数指针与函数_第3页
c结构体中的函数指针与函数_第4页
c结构体中的函数指针与函数_第5页
资源描述:

《c结构体中的函数指针与函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C结构体中的函数指针与函数1.函数指针一般的函数指针可以这么定义:int(*func)(int,int);表示一个指向含有两个int参数并且返回值是int形式的任何一个函数指针.假如存在这样的一个函数:intadd2(intx,inty){returnx+y;}那么在实际使用指针func时可以这样实现:func=&add2;//指针赋值,或者func=add2;add2与&add2意义相同printf("func(3,4)=%d",func(3,4));事实上,为了代码的移植考虑,一般使用typedef定义函数指

2、针类型.typedefint(*FUN)(int,int);FUNfunc=&add2;func();2.结构体中包含函数指针其实在结构体中,也可以像一般变量一样,包含函数指针变量.下面是一种简单的实现.#include"stdio.h"structDEMO{intx,y;int(*func)(int,int);//函数指针};intadd2(intx,inty){returnx+y;}voidmain(){structDEMOdemo;demo.func=&add2;//结构体函数指针赋值printf("func(

3、3,4)=%d",demo.func(3,4));}上面的文件保存为mytest.c,在VC6.0和gcc4中编译通过.3.结构体中的函数既然C++在介绍类的时候说过,类是取代结构体的.可见结构体的功能并非我们平时用到的这么简单,没有太多人知道结构体中也可以有自己的函数成员.举个例子:#include"stdio.h"structDEMO{intm;DEMO(intk)//构造函数{this->m=k;printf("afterinit,m=%d",m);}voidfunc()//一般函数{printf("f

4、unctionofstruct.");}};voidmain(){structDEMOdemo(33);demo.func();} 保存为mytest1.c,VC6.0和gcc编译都会出错.这可能说明标准C是不支持结构体包括函数成员形式的(因为后缀.c使得VC或gcc选择c编译器).但是如果将文件后缀改为.cpp(也就是选择c++编译),就不再有错误了,得到结果:afterinit,m=33functionofstruct.也就是说,在C++中允许结构体包含函数成员,而标准C不支持.进一步发现,c++中甚至允许结

5、构体中含有构造函数、重载、public/private等等.这样看来,结构体真的与类越来越靠近相似了!C++扩充了结构体的功能。但C++中为了介绍面向对象的类,却淡化了同样精彩的结构体。当我们写一些小程序而觉得没有必要去构造类的时候,选择结构体确实会方便很多.函数指针的说明:  已知函数指针定义声明float(*h)();  怎么理解语句?(*(void(*)())0)();   这是一个C语句,表示(*p)();其中p指向0,0被强制转换成(void(*)())格式。  或者用typedef将上面式子分成两步:  

6、typedefvoid(*pFUNC)();//pFUNC表示一种函数指针类型,这样的函数式voidfun()形式.  (*(pFunc)0)(); 对于这一点,在unix编程signal方面用到过,如下:   signal函数原型:void(*signal(intsigno,void(*func)(int)))(int);   其第二个参数func是一个void型函数指针(该函数参数为int),并且返回一个void型函数指针(该函数参数为int),简化这个定义,可以typedefvoidSigfunc(int); 

7、然后signal函数原形写为Sigfunc*signal(int,Sigfunc*);    三个常量用于替代这样的指针。定义如下:#defineSIG_ERR(void(*)())-1#defineSIG_DFL(void(*)())0#defineSIG_IGN(void(*)())1函数应用if(signal(SIGUSR1,sig_func)==SIG_ERR)   err_sys("can'tcatchSIGUSR1");

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。