理解复杂C声明

来源:互联网 发布:淘宝发布定制产品 编辑:程序博客网 时间:2024/05/16 08:10

在看别人程序火写程序之肯定会先声明变量那如何正确的去看这些声明,首先需要知道“右左法则”这在理解复杂声明时很重要。

在使用“右左法则”时先确定变量的位置。先向变量的右边读再向左边读。

先从简单开始:

int a;整型变量   int *a;整型指针变量int **a;整型指针的指针变量

Int *a[10]; 整形指针数组 int (*a)[10]; 整型数组指针变量  int (*a)(int);函数指针变量

Int (*a[10])(int) 函数指针数组

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

对复杂声明也同样适用,如下:

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

    fp1:函数指针变量,指向一个形参int,返回值为数组指针,该指针指向一个整型指针数组;

阅读步骤:  

1. 从变量名开始 -------------------------------------------- fp1  

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

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

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

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

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

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

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

float ( * ( * e[10]) (int *) ) [5];   

e是一个函数指针数组,该数组的元素指向一个形参为int *,返回值为数组指针,该指针指向float型的数组;

float ( * ( *b()) [] )();      

    b是一个函数,该函数形参为空,返回值为数组指针,该数组指针指向一个函数指针数组,数组里的元素指向一个形参为空,返回值为float

0 0