c语言中二维数组*(a+i)的意义

如题所述

*(a+i)——二维数组第i行(从0起算)第一个元素的地址。追问

地址?*p不是代表存储单元的内容吗?一维的*a和二维的*(a+i)代表的意义应该类似吧?

追答

这奇怪吗?若p是有效指针,*p确实是p指向的“单元”里的内容,可这“内容”就不能是地址吗?既然a是二维数组,那a+i就是第i行数组的地址,*(a+i)就是第i行第一个元素的地址;且,a+i的值和*(a+i)值是相等的,因为都是第i行第一个元素所在的地址;但是意义不同,前者是这一行的地址,若a+i+1的话就是i的下一行的地址了,而后者*(a+i)是第一个元素的地址,*(a+i)+1就是i行第二个元素的地址。

追问

char ch[]=”iamhandsome”;
char *p=ch;
问*(p+2) 和 *p+2的结果是多少?

追答

*(p+2)是m,*p+2是k。但这是一维数组,p本身就是一维数组第一个元素的指针。你的问题是二维数组,二维数组的第一维都是一个像这里的p一样的指针!

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-04-30
所谓*(a+i)等价于a[i],而a[i]是一个数组名,那么a[i] = &a[i][0],数组名等与首元素的地址本回答被网友采纳

二维数组中*(a+i)是什么意思
在C语言中规定,数组名代表的是数组首元素地址。a是二维数组的数组名,因此,在二维数组中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。

int a[2][2]={{1,2},{3,4}},那*(a+1)代表什么?
对于二维数组来说,例如a[x][y],在空间结构上,x表示行,y表示列。所以*(a+i)表示的是第i行的行首地址,所谓行首地址,也就是该行的数组成员的首地址。是可以等同的视为&a[i][0]的。所以,这里的*(a+1)代表第一行的数组成员的首地址。第一行数组成员为{3,4},所以*(a+1)也就指向&...

c语言二维数组与指针,我想知道为什么*(a+1).与显示中的a+1,所给出的...
二维数组是两层指针,这个你该明白 (*(a+i)+j)这个是表示i行的第j个数据,注意啊,是两个 要是不理解,记住套用即可 一个*是指针 所以ij都是指针 a+1是一个指针,表示第1行的首地址(c中数组时从0开始计数的)在二维数组中,a,a[0],&a[0][0]这三个指针虽然都是a的首地址的值,...

引用数组元素*(*(a+i))是什么意思
这样 a 是二维数组 比如 a[5][5](*(a+1)) 就是 a[1][0](*(a+2)) 就是 a[2][0](*(a)+1)) 就是 a[0][1](*(a+2)+1)) 就是 a[2][1]

在二维数组里 地址a[i]和地址*(a+i)的问题
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.&a[i]是不一样的,首先,a[i]是...

c语言请问*(*a+i)是什么意思?
二维数组的指针下标表示法 第一行第i+1列(因为数组下标是从0开始的)等价于a[0][i]也等价于*(*(a+0)+i)

C语言中的二维数组里a+1和*(a+1)为什么都是地址
a+bai1应该是 (a+0)+1 这里的a是二维数组中的二级指针 数组名为a[0]的一维数组(表示行)也是数组名为a的一维数组(表示列)后面的1表示行数组移动1行 0表示列的移动 所以是1行0列的地址 (a+1)中a是二级指针 取值二级指针是一级指针 一级指针指向的一维数组(二维数组中的行)一维数组...

*(a+i)与a[i]与(a+i)是一样的地址,为什么?
呵呵,你错了,对于数组a[i],a表示该数组的起始地址,即a=&a[0], 所以 *(a+i)表示a+i指向的数组元素,*(a+i)=a[i]。对于二维数组,&a[0][0]就不能用a表示了,而是用a[0]+0表示,二维数组可以看成一维数组,不过它的每一个数组元素又是一个一维数组,比如a[3][4]的第一行...

C语言、二维数组指针中的 * 和 &
1、我看了你说的这两页,书上的原话是这样的:“在二维数组中,a+i,*(a+i),&a[i],&a[i][0]的值相等,即他们都是同一地址值”,要注意这个字眼“地址值”,也就是说,这几种表达方式并不是内存中存的数值,而是存放数组的地址的值,首先要弄明白,首地址这个概念,如果只写数组名,就...

在二维数组中为什么 *(a+i)+j 代表的是地址而不是值元素?
可以这么说吧, 在二维数组中,数组名a指向二维数组的第一行,就是&a[0]. a+i就是代表第i行地址,即&a[i]. 而*(a + i)是求第i行首元素的值,就是a[i]. 这时指针从指向行元素转为指向列元素.*(a + i)+j就是a[i]+j,是a[i][j]的地址. *(*(a + i)+j)是a[i][j]的值.

相似回答