指针 复杂的声明

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关键字作用于它左边紧邻的指针星号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值