二维数组中第i行行指针与第i行第0列元素指针有什么区别?
如,二维数组中,a+i和*(a+i)有什么区别,a[i]与&a[i]又有什么区别,能不能说详细一点,本人小白一个,谢谢大神指点。...
如,二维数组中,a+i和*(a+i)有什么区别,a[i]与&a[i]又有什么区别,能不能说详细一点,本人小白一个,谢谢大神指点。
展开
1个回答
展开全部
首先数组名编译器会隐式变换看做指针常量,因此a[i]与a+i是等价的。
a+i返回由i指定的行地址,假设元素类型为char,则行指针类型为char (*)[n],其中n为列宽,即每行元素数量。当行指针指向一个地址时,此时该行首元素地址与行地址是一致的,但是类型不同,很重要,你必须要明确,这个是理解二维数组指针的关键。
星号在指针前含义为取指针指向内存中的值,但是由于行指针指向的是一行元素整体而不是单个元素,因此*(a+i)返回i指定行的所有元素,但是一行元素是不可能以值的形式直接获得,所以编译器返回的是一维数组指针char *,所以再此情形下你可以理解为星号是将行指针转换为普通一维数组指针,即 char (*)[n]转换为 char *。
&a[i]返回i指定行的第一元素地址,与&a[i][0]等价。
a+i返回由i指定的行地址,假设元素类型为char,则行指针类型为char (*)[n],其中n为列宽,即每行元素数量。当行指针指向一个地址时,此时该行首元素地址与行地址是一致的,但是类型不同,很重要,你必须要明确,这个是理解二维数组指针的关键。
星号在指针前含义为取指针指向内存中的值,但是由于行指针指向的是一行元素整体而不是单个元素,因此*(a+i)返回i指定行的所有元素,但是一行元素是不可能以值的形式直接获得,所以编译器返回的是一维数组指针char *,所以再此情形下你可以理解为星号是将行指针转换为普通一维数组指针,即 char (*)[n]转换为 char *。
&a[i]返回i指定行的第一元素地址,与&a[i][0]等价。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询