原创 用右左法则理解c和c ++的复杂类型声明

2010-4-30 13:12 1748 7 7 分类: MCU/ 嵌入式

右左法则理解cc ++的复杂类型声<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


右左法则是一个简单的法则,但能让你准确理解所有的声明。这个法则运用如下:从最内部的括号开始阅读声明,向右看,然后向左看。当你碰到一个括号时就调转阅读的方向。括号内的所有内容都分析完毕就跳出括号的范围。这样继续,直到整个声明都被分析完毕。

对上述右左法则做一个小小的修正:当你第一次开始阅读声明的时候,你必须从变量名开始,而不是从最内部的括号。

下面结合例子来演示一下右左法则的使用。


Int* (*(*fp1) (int))[10];

阅读步骤:

1.
从变量名开始——fp1

2.
往右看,什么也没有,碰到了),因此往左看,碰到一个*——一个指针

3.
跳出括号,碰到了(int)——一个带一个int参数的函数

4.
向左看,发现一个*——(函数)返回一个指针

5.
跳出括号,向右看,碰到[10]——一个10元素的数组

6.
向左看,发现一个*——指针

7.
向左看,发现int——int类型

总结:fp1被声明成为一个函数的指针,该函数返回指向指针数组的指针.

再来看一个例子:



int * ( *( *arr[5]) () ) ();
阅读步骤:

1.
从变量名开始——arr

2.
往右看,发现是一个数组——一个5元素的数组

3.
向左看,发现一个*——指针

4.
跳出括号,向右看,发现()——不带参数的函数

5.
向左看,碰到*——(函数)返回一个指针

6.
跳出括号,向右发现()——不带参数的函数

7.
向左,发现*——(函数)返回一个指针

8.
继续向左,发现int——int类型


 


 例子3:


 


Int RollNum[30][4];


Int(*p)[4]=RollNum;


Int *q[5];


这里,p被声明为一个指向一个4元素(int类型)数组的指针,而q被声明为一个包含5个元素(int类型的指针)的数组

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条