在这之前我对c语言的声明理解不多,看到稍长一些的声明就一头雾水,今天把自己对c语言的
声明理解总结如下。
先让我们来看一下几个例子
1、int *p[3];
2、int (*p)[3];
3、char * const * ( *next ) ();
4、char * (* c[10] ) (int **p);
以上几个例子如果能理解,那么下面的法则就没有必要继续看了,请直接跳到代码段。
理解c语言声明优先级有如下准则:
A 先找标识符
B
b1声明中括号里面的部分
b2 括号后面括号()表示一个函数,而方括号[ ]表示一个数组
b3 前缀操作符:*表示 "指向...的指针"
C 如果const和volatible关键字的后面紧跟类型说明符(int long),则作用该说明符,其他情况,作用于他左边紧邻的指针星号。
具体见下图摘自 Expert c Programming
按照如此法则得出开篇答案如下:
1、int *p[3]; Equal to:int *(p[3])
p是一个int型指针数组;//p是一个数组,它的元素是指向int型的指针。
2、int (*p)[3];
p是指向int型数组的指针;//p是一个指针,它指向一个数组,数组内有3个int型元素。
3、char * const * ( *next ) ();//注 const只读的。。
next是一个指向函数的指针,该函数返回另一个指针,该指针指向一个只读的指向char型的指针。
4、char * (* c[10] ) (int **p);
c是一个指数组,该数组元素是一个指向函数的指针,该函数返回一个指向char的指针,且该函数的形参是一个指向int的指针的指针。