1 问题
-
下面的标识符代表什么含义?
int (*p1)(int*,int (*f)(int*)); int (*p2[5])(int*); int (*(*p3)[5])(int*); int* (*(*p4)(int*))(int*); int (*(*p5)(int*))[5];
2 指针阅读技巧
-
右左法则
- 从最里层的圆括号中未定义的标识符看起
- 首先往右看,再往左看
- 遇到圆括号或者方括号时可以确定部分类型,并调转方向
- 重复2,3步骤,直到阅读结束
-
示例
int (*p1)(int*,int (*f)(int*));
:p1
是指针,指向函数,指向的函数参数为:int*
,f
,(其中f
为函数指针,指向的函数参数是int*
,返回值是int
),指向的函数返回值为:int
int (*p2[5])(int*);
:p2
是数组,有5个元素,这5个元素为指针,指针类型为函数指针,函数类型为:int(int*)
int (*(*p3)[5])(int*);
:p3
是指针,为数组指针,指向的数组有5个元素,每个元素为指针,指针的类型为函数指针,指向的函数类型为:int(int*)
int* (*(*p4)(int*))(int*);
:p4
是指针,为函数指针,函数参数为:int*
,返回值为:指针,该指针是函数指针,函数的参数为:int*
,返回值为为:int*
int (*(*p5)(int*))[5];
:p5
是指针,为函数指针,函数参数为:int*
,返回值为:指针,该指针指向一个数组,数组的类为int[5]
-
可通过
typedef
简化复杂指针的定义,如对于p5
typedef int(ArrayType)[5]; typedef ArrayType*(FuncType)(int*); FuncType* p5;