书上关于“数组指针”几句话不理解,请帮忙解释

来源:百度知道 编辑:UC知道 时间:2024/05/23 21:07:01
二维数组指针(变量)的定义格式:
基类型 (*指针变量名)[整型表达式]
普通二维数组的定义格式: 类型 数组名[下标表达式1][下标表达式2]
上面的“整型表达式”必须是二维数组中的 一维数组里的元素的个数,即对应二维数组定义中的“下标表达式2”

举例: int a[4][3];
int (*pa)[3];
解释(*pa)[3] ,由于存在一对圆括号,所以“*”首先与pa结合,表示pa是一个指针变量,然后再与标识符“[]”结合,表示指针变量pa的基类型是一个包含有3个int元素的数组。在这里,pa的基类型与a数组的相同,因此,以下语句:
pa = a;是合法的赋值语句。pa+1等价于a+1 。
pa=a[0];//错误
pa= &a[0][0];//错误

对于上面的那句“pa的基类型与a数组的相同”,这什么意思啊,请帮忙解释解释,最好通俗易懂的,谢谢

理解他们之间的关系就好了,有时候书上的一些表述并不是很合适。

基类型是什么?
数组的基类型是什么?

按照文中的说法:"pa的基类型是一个包含有3个int元素的数组"

那么这样理解,把a看作一维数组a[4],那么它的每个元素也是一个包含3个int元素的数组。

(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
(3)int **ptr; //指针所指向的的类型是 int *
(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]