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

C语言,有如下定义: int a[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定义了一个数组指针么?它指向了a[0]的地址是么? 请详细解释一下 int (*pa)[3]=a;的含义 为啥要这么写啊 以及和指针数组的区别,谢谢!

其实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]
与指针数组的区别是:指向数组的指针是一个指针(只不过它指向的是数组的地址,并以整个数组为单位作运算),而指针数组是多个指针(每个元素都是一个指针)
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜