您的位置:首页 > 其它

指针 复杂的声明

2009-08-03 21:48 197 查看
int *( *(*fp1)(int) )[10];

阅读步骤:
1. 从变量名开始 ---------------------------- fp1
2. 往右看,是“)”,因此往左看,是“*” ------- 一个指针
3. 跳出括号,碰到了(int) ------------ 一个带一个int参数的函数
4. 向左看,发现一个* ---------------------(函数)返回一个指针
5. 跳出括号,向右看,碰到[10] ------------- 一个10元素的数组
6. 向左看,发现一个* ----------------------- 指针
7. 向左看,发现int ----------------------- int类型

p是一个指针,指向一个函数,函数参数为int型,函数返回一个指针,指向一个数组(10个元素),数组里面保存int*。

union sign *(*var[5])[5];

var声明了一个指针数组,指针指向一个union sign指针的数组(5个元素)。

const char * const * const p8;

p8是一个const指针,指向一个const指针pa,pa指针指向const char类型。

char (* (*x[3]) () ) [5]

x是一个数组,包含3个函数指针,函数指针返回一个指向char[5]的指针。

char *(* c[10])(int **)

c是一个函数指针数组,参数为int**(指向int指针的指针),返回值为char*。

unsigned int *(* const *name[5][10] ) ( void );

name是一个2维数组(5×10),保存的是指向const型函数指针的指针,函数指针返回值为UINT指针。

关于如何解析复杂的声明,可以参考前面提到的相关文档。其中C专家编程里面提到了一个人机皆可使用的规则。

A 声明从名字开始读取,然后按照优先级依次读取。

B 优先级从高到低依次为:

B1 被括号括起来的部分

B2 声明后缀符, 括号表示是一个函数,方括号【】表示是一个数组。

B3 前缀操作,*表示“指向…的指针”

C 如果const和(或)volatile关键字后面紧跟类型说明符(如int long double),那么它作用于类型说明符。在其他情况下const volatile关键字作用于它左边紧邻的指针星号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: