运算符[ ]的优先级高于*
一、指针数组
所以:
int *p_a[5];
定义了一个指针数组,其中有5个数组元素,每个数组元素都是一个int类型的指针。
二、数组指针
int (*p_a)[5]表示数组指针
此时p_a中的地址为该数组第一个元素的地址。
根据《二重指针、二维数组及二者如何进行赋值_jiongta9473的博客-CSDN博客》这篇文章中3.2的特别说明,可以知道:
int (*p_a)[2][3]与int (*p_a)[2]是不同的指针,不能随便赋值。例子如下:
int a[2][3] = {1, 2, 3, 4, 5, 6};
int m[3] = {1, 2, 3};
int (*f)[2][3];
//错误:
f = &m;
//正确:
f = &a;
另外,注意下面的情况,也是错误的:
int a[2][3] = {1, 2, 3, 4, 5, 6};
int m[3] = {1, 2, 3};
int (*f)[3][3]; //将此处的2改为3
//错误:
f = &a;
此时的f的类型为[3][3]和a的类型不同([2][3]),就像int 和float的类型不同一样。