首页 > 代码库 > 娓娓道来c指针 (4)解析c的声明语句

娓娓道来c指针 (4)解析c的声明语句

                         (4)解析c的声明语句

在继续探索c指针之前,有必要来解析下c语言中复杂的声明语法。

只需要记住两点:一个原则,一个规则。

原则:先看标示符。

规则:运算符优先级是规则。


举例说明

1.最简单的 int array[3];

结论:array是数组,数组规模是3,元素类型是int。

解析过程:先看标示符:array,只有一个运算符[],那么array就是数组,元素类型是int,完了。


2.难一点的

(1)数组指针 int(*array)[3];

结论:array是一指针,指向一数组,数组规模是3,数组中元素类型int。

解析过程:先看标示符:array,由于使用了括号运算符,只能先解析(*array):说明array是一指针。解析完了的,就可抛弃,那么只剩下[],说明指向的是一数组,剩下的不解释了。

(2)指针数组 int *array[3];

结论:array是一数组,数组规模是3,数组中元素类型是int*。

解析过程:先看标示符:array,由于[]优先级高于*,故array先与[]结合:说明array是一数组。只剩下一个*,说明数组中存放的是指针,指针指向的类型是int,也就是说数组中存放的元素类型是int*。

看来只差一个(),意义完全不同。

数组指针和指针数组的内存示意图:



3.再复杂一点的

函数指针 int (*pfun)(int,int);

结论:pfun是一函数指针,即pfun指向一个函数,该函数有两个参数,参数类型是int、int,并且函数的返回值的类型是int。

解析过程:先看标示符:pfun,由于使用了括号运算符,只能先解析(*pfun):说明pfun是一指针。现只剩下(int,int),进一步说明pfun指向的是一函数,该函数有两参数,类型都是int,最后的int,说明函数的返回值类型是int。


4.更加复杂一点

int *(*pfun[3])(int, void (*)(int, int*));

是否有眼花缭乱的感觉,运用上面的方法,你会解析出来的。不妨写在评论中,比较看看。


专栏目录:C指针