C语言,有如下定义: int a[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定

2025-03-31 05:00:41
推荐回答(1个)
回答1:

其实pa是一个指向(包含3个元素的)一维数组的指针,因此可以指向任何一个包含3个元素的一维数组
而a[2][3]是二维数组,可以看作是由a[0]和a[1]两个包含三个元素的一维数组组成,如a[0]就可以认为是包含a[0][0]、a[0][1]、a[0][2]三个元素的一维数组a[0]
这样就可以理解pa=a的意义了,由于数组a的首地址实际上相当于a[0]这个一维数组的首地址,因此pa指向的是a[0][0]的地址,即&a[0][0]

使用指向数组的指针的好处是,可以把数组作为一个整体,如pa++或pa=pa+1会让pa的值变为&a[1][0],而不是&a[0][1]
与指针数组的区别是:指向数组的指针是一个指针(只不过它指向的是数组的地址,并以整个数组为单位作运算),而指针数组是多个指针(每个元素都是一个指针)