右左法则
对于一些长或者复杂的声明的名称,理解起来有点困难。但是右左法则能很好的解决这个问题。
而右左法虽不是不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的。
这个法则的具体的应用:从内部括号开始阅读(必须从变量名开始)声明,向右看,然后向左看。当碰到一个括号的时候就调转阅读的方向。括号内的所有的内容都是分析完毕就跳出括号的范围。直到声明都被分析完毕。
举例:
Int *(* (*fpl) (int)) [10];
阅读的步骤:
1.从变量的名开始------fpl.
2.往右看,什么也没有,碰到了),因此往左看,碰到了一个*------一个指针。
3.跳出括号。碰到(int)-------一个带一个int参数的函数。
4.往左看,发现一个*-------函数返回一个指针。
5.跳出括号,往右看,碰到[10],---------一个10元素的数组。
6.往左看,发现一个*--------指针。
7.往左看,发现int-----int 类型。
fpl被声明成为一个函数指针,该函数返回指向指针数组的指针。
再来看一个例子:
int *(*(*arr[5])())();
1.从变量名开始------------arr。
2.往右看,发现是一个数组--------------一个5元素的数组
3.向左看,发现一个*----------指针
4.跳出括号,向右看,发现()---------不带参数的函数
5.向左看,发现*---------------函数返回一个指针
6.跳出括号,向右看,发现()---------不带参数的函数
7.向左看,发现*---------------函数返回一个指针
8.继续向左,发现int------------int类型
总结:arr被声明成为一个函数的数组指针,该函数返回指向函数指针的指针