类型判断:
声明一种类型后,特别是复杂的类型时,判断的方法为:以标识符为起点 先右后左 碰到小括号 ( )
掉头 所有路径只走一次。
举例分析
int a[10][2]
a 为标识符,往右走遇到中括号 [
,说明a为数组,对于数组,关心的是数组元素的个数和元素类型,继续往右走可以发现元素个数为10个,类型呢?往右走遇到 [
,说明类型又是一个数组,同样往右走发现该数组为 2 个元素,到底后往回走,前面走过的都去掉,发现元素类型为整型。所以 a 的类型为包含 10 个元素的数组,每个元素为包含 2 个整型元素的数组。
int (*a)[10]
a 为标识符,往右走遇到 )
后往回走遇到 *
表明 a 的类型为指针,对于指针,关心的是指针指向的类型,此时继续走后遇到 (
再往回走(之前走过的都去掉),遇到 [
说明指针指向的类型为数组,什么样的数组呢?往下走发现是 10 个整型元算的数组。所以,a 为一个指向包含 10 个整型元素数组的指针。
int *(*a)[10]
a 为指针,指向包含 10 个元素的数组,而该数组元素为整型指针;
int *(**a)[10]
a 为指针,指向一个指针,被指向的指针指向一个包含 10 个元素的数组,数组元素为整型指针;
int a(char *,int)
a 为函数,函数的第一个形参为 char 型指针,第二个为整型,返回值为整型;
int *a(char *,int)
a 为函数,函数的第一个形参为 char 型指针,第二个为整型,返回值为整型指针;
int (*a)(char *,int)
a 为指针,指向一个函数,而这个函数的第一个形参为 char 型指针,第二个为整型,返回值为整型;
int (*a[10])(char *,int)
a 为包含 10 个元素的数组,数组的元素为指针,指针指向的类型为函数,而这个函数的第一个形参为char型指针,第二个为整型,返回值为整型;