问:
Char RollNum[30][4]; char (*p)[4]; char *q[4] char **r = q;
RollNum、p、q、r三者异同, 怎么区分。
答:
-
RollNum 是二维数组名,即是数组首行的地址,相当于 &RollNum[30]
-
(*p)[4]是一个指向包含四个元素的一维数组的指针变量,如果RollNum作为函数实参,则 (*p)[4] 作形参,此时 (*p)[4] 相当于数组首行地址。(数组指针)
-
*q[4] 是一个指针数组,该数组中每个元素都是一个指针,每个指针指向哪里需要在程序中后续再定义了。(因为[ ] 的优先级比 * 要高, *q不加括号就相当于 *(q[4]);
-
int * *r = q 是指向指针数组的指针,至于为什么有两个*号,如果我们写成 *r,那么r就是指针数组这个数组的首元素地址,我们要的是这个数组的首元素内容,(因为首元素内容是某个变量的地址)而不是首元素的地址。所以再加个*,p就是我们要指的变量的地址了。