C中关于函数指针的复杂声明
时间:2011-01-04 来源:tomjamescn
首先,看看函数指针:
void (*aFunPointer)(int);//一个函数指针变量,指向的函数声明为void fun(int)
//如果需要调用,则写法为void r = (*aFunPointer)(arg); |
typedef void (*FunPointerType)(int);//一种函数指针类型,这个类型指向的函数声明为void fun(int)
FunPointerType aFunPointer;//和上面的代码声明的函数指针变量等价 |
有了函数指针,就来看看函数指针数组,参考了资料:
void function0();
void (*aFunPointerArray[])() = { |
typedef void (*FunPointerArrayType[])();//声明一个函数指针数组类型
FunPointerArrayType aFunPointerArray = {function0,function1,0};//定义一个函数指针数组变量
//调用
(*aFunPointerArray[0])(); |
void (*fun(int))(int);//fun是一个函数,参数是int,返回值是一个函数指针,这个函数指针的类型为void (*FunPointerType)(int),即声明为void FunPointerType(int)的函数
//上面的声明等同于: typedef void (*FunPointerType)(int); FunPointerType fun(int);
//linux下的信号处理函数signal就是一个返回函数指针的函数: //在signal.h中,signal的声明如下:
typedef void (*sighandler_t)(int); //上面两行等同于 void (*signal(int sig, void (*func)(int)))(int); |
最后看看,返回指向(函数指针数组)的指针的函数的声明
//此例子来自于C程序设计语言,即The.C.Programming.Language的5.12节。 //返回的函数指针数组类型为char (*FunPointerArrayType[])(), //每一个函数指针指向形如char fun()声明的函数 //这个函数指针数组的指针为char (*(*FunPointerArrayPointerType[]))(), //函数x的原型为 x();将上面一行中的FunPointerArrayPointerType用x()进行替换得到
char (*(*x())[])(); //上面的声明等价于什么,我没有弄明白 |
还有一个例子,单独拿出来
char (*(*x[3])())[5]
//按照书上的说法是,
//x: array[3] of pointer to function returning pointer to array[5] of char
//即,x是一个函数指针数组,大小为3,每一个函数指针指向的函数声明为
typedef char (*PPP)[5];
PPP fun();