
C语言,有如下定义: int a[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定
C语言,有如下定义:inta[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定义了一个数组指针么?它指向了a[0]的地址是么?请详细解释一下int(*pa...
C语言,有如下定义:
int a[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定义了一个数组指针么?它指向了a[0]的地址是么?
请详细解释一下
int (*pa)[3]=a;的含义 为啥要这么写啊 以及和指针数组的区别,谢谢! 展开
int a[2][3],(*pa)[3]=a;不是定义一个二维数组a么,又定义了一个数组指针么?它指向了a[0]的地址是么?
请详细解释一下
int (*pa)[3]=a;的含义 为啥要这么写啊 以及和指针数组的区别,谢谢! 展开
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]
与指针数组的区别是:指向数组的指针是一个指针(只不过它指向的是数组的地址,并以整个数组为单位作运算),而指针数组是多个指针(每个元素都是一个指针)
而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]
与指针数组的区别是:指向数组的指针是一个指针(只不过它指向的是数组的地址,并以整个数组为单位作运算),而指针数组是多个指针(每个元素都是一个指针)
更多追问追答
追问
二维数组a是指向a[0]的地址的没错吧,又因为a[0]是第0行的数组名,所以a[0]又指向了a[0][0]的地址,是吧,那既然可以把指针pa看成是一个指向包含3个数组元素的一维数组的指针,那二维数组就可以看成是2个特殊的一维数组,(每个数组又包含了3个元素)分别是a[0]和a[1],那么指针pa就直接指向了元素a[0][0]的地址了?怎么不指向a[0]的地址呢?还是没明白诶……
追答
a[0][0]的地址其实就是a[0],也就是a,由于数组是二维数组,因此a[0]本身就是一个地址,&a[0]没有任何意义
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询