C语言的声明是C语言区别于其他语言的一大亮点,也是一大难点。本文针对的是有一些C语言基础的同学。所以,如果有同学还不清楚C语言的变量的声明和定义的,现在可以关闭本页面了。
本文主要讲解的是C声明的优先级规则。
如下所示:
下面通过一个例子来具体说明上面的声明优先级。
char * const *(*next)();
刚看这个声明,比较晕,不知,从何下手,但是按照上面的优先级顺序,一步一步解析,答案很简单;
A 首先,从变量名开始,看变量名“next”,注意它是直接被括号所括住的。
B 1、把括号当做一个整体,可以得出”next是一个指向...的指针“。接着我们看括号外的左边有星号*,右边有括号(),该选择哪一个?这个时候看第二步;
2、右边的括号优先级要高一些,所以,得出“next是一个函数指针”,如果是函数的话,得要有传入参数,和返回参数,我们可以看出,没有传入参数,但是,有返回参数。
3、处理前缀“*”,得出指针所指向的内容。
C 最后 ,把“char * const"解释为指向字符的常量指针。
以上分析的结果是:“next是一个指针,它指向一个函数,该函数返回另一个指针,该指针指向一个类型为char的常量指针”。
如果对上面结果理解有困难的话,可以打个比方,next指向的指针的函数设为func,func的返回类型为一个指针p,该指针指向一个常量指针cp,cp指向的内容类型为char类型。注意,这里的const修饰的p所指向的内容,也即cp,而不是最后的char类型。
如果你已经弄明白了上述的过程,现在有一个实例:
char * (* c[10])(int **p);
按照上面的步骤来:
1.c是数组[0...9],数组元素是指针
2.跳出当前的括号,注意后面的括号,表示,数组中的元素是函数指针,即数组中的元素指针指向函数,函数的传入参数是int **p形式。
3.函数的返回类型是char *类型。