首地址和第0列元素地址不是一个意思吗,难道我语文有问题?
谁能为我解答,谢谢!
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)也就指向&...
二维数组中,a+i表示第i行的地址,那为什么*(a+i)也表示第i行的地址。
a+i和*(a+i)的值相同没错,但它们的类型不一样,代表的意义也不一样。a+i还是2维指针,*(a+i)则是一维指针。编译器对它们的解析和操作是不一样的。
二维数组中*(a+i)是什么意思
在C语言中规定,数组名代表的是数组首元素地址。a是二维数组的数组名,因此,在二维数组中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。
在指针中,先定义int a[3][4],则a+1和&a[1]表示行地址吧,a[1],*(a+...
a表示第一个班长,那么a+1就表示了第二个班长,也就是属排长管的范围,属行地址。a[1],取行地址所指向的值了,就地址降级,也就是降到班长所管的范围,也就表示具体的a[1][0]的地址了,然后再&a[1],又地址升级,就变成排长管的范围,也就变成行地址,也就表示第1行的地址。(a+1):首先a...
为什么C语言二维数组a[2][2], a和*a输出是相同的,都表示一个地址
所以从类型上讲,a是指向指针的指针,*a是指向一行一维数组的指针。但a作为数组名,又表示了数组首地址(在内存中元素地址是连续的)。a是第一行数组首地址。所以值相同 (注意只是值相同,比如a[n]和(*a)[n]意义就不一样,一个表示第n行的行指针,一个是第一行的第n列)。
...吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什么还是
a+i其实就是&a[i],肯定是地址 (a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)(a+i)+j就是&a[i][j],如果数组a是二维...
在二维数组里 地址a[i]和地址*(a+i)的问题
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.&a[i]是不一样的,首先,a[i]是...
...+2)出错,&*(a+i)表示第i行首地址,为什么加了列以后却报错_百度知 ...
前提是a是一个二维数组吧 a+i 表示的是表示第i行首地址,(a+i)表示第i行首元素的地址 在 &*(a+i) 也就是 &(* (a+i) ) 中,&和* 相当于相互抵消了。而 &(*(a+1)+2)出错,是因为这个类推并不对应。要对应的话,见下图 int i=1,j,x,y,z,w; char a[3][80], *p,(*pp...
*(*(a+i))与*(a+i)
int (*p)[n]是一个数组指针,可以当成一个二维数组看待。*(p+i)代表的是第i行的首地址,是整行元素,*(*(p+i))代表的是第i行第一个元素的地址,同理*(*(p+i)+j)代表的是第i行第j列的地址。本人也是新手,回答的不对的地方还请多多包容。。。
*(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]的第一行...