首页 > 代码库 > 娓娓道来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*));
是否有眼花缭乱的感觉,运用上面的方法,你会解析出来的。不妨写在评论中,比较看看。