函数指针

来源:互联网 发布:桥林街道网络问政 编辑:程序博客网 时间:2024/06/04 21:10

int (* func_p) ();

int (* func_p[])();  // 指向函数指针数组
int (* func_p[size])();  // 指向大小为size的函数指针数组
int (* const func_p)();  // 常量函数指针
复合声明时,声明符表达式的优先顺序非常重要。函数与数组声明符的优先级高于指针声明符,因此“*x()”等价于“*(x())”(“返回值为...指针的函数”)而不是“(*x)()”(“指向返回值为...的函数的指针”)。
例子:
int *(*(*(*x)())[10])();
分析:
可以替换成:
typedef int *(*print_function_ptr)();
typedef print_function_ptr (*digit_routines)[10];
digit_routines (*x)();
结论:
变量x是函数指针,这个函数的返回值为指向包含10个元素的指针数组的指针,而指针数组中的指针指向返回值为指向整数的指针的函数。
如果声明 int *(*x)[4]; 则 表达式*(*x)[i]的类型为int。
int (*ff(int)) (int*, int);
分析:
typedef int (*PF) (int*, int);
PF ff(int);
ff是一个带有一个int形参的函数,它的返回值是一个函数指针,这个函数指针指向带有形参int*和int并返回int的函数。
参见  C: A Reference Manual 
      C++ Primer 4th

原创粉丝点击