二維陣列a中,為什麼a1是地址

2021-03-03 21:53:11 字數 3092 閱讀 3034

1樓:匿名使用者

a相當於是a[0][0]的地址

不是的,a+1是地址,*(a+1)是取a+1這個地址的值a+1是a[0][1]的地址

*(a+1)相當於是a[0][1]

所以輸出2

2樓:匿名使用者

對,是地址,*(a+i)是第i行的首地址

其實你那個是簡化了,嚴格的來說應該這麼寫

printf("%d\n",*(*(a+1)+0));

c語言中的二維陣列裡a+1和*(a+1)為什麼都是地址

3樓:劉文正粉絲

二維陣列, int a[10][20];

a是一個指標的指標, 即二級指標.

一個指標加一個數, 當然還是指標(即a+1是指標)

取值一個二級指標, 是一級指標(即指標), 所以還是指標, 不過型別發生了變化.

a+1的型別為int *[10].

而*(a+1)的型別則為int *, 也就是平常的指標.

如果你學習二維陣列是用心, 你就會知道不存在二維陣列, 二維陣列其實是一個包含陣列的陣列, 即陣列的每一個元素還是一個陣列(這點有點像物件導向的思維).

所以a[0]就是取第一個元素值, 而第一個元素是陣列, 所以其值仍是一個指標.

答了這麼多, 一看問題, 發現是"地址".....地址和指標是一個東西.

4樓:zh呼嘯而過

例如a[5][10];

a + 1的值是第二行的首地址,

* (a + 1)得值也是第二行的首地址,但是a + 1不等於a[1],而* (a + 1)等於a[1]。

如果給a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首地址

如果給*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二個地址

他們移動的區別:前者是縱向的,後者是橫向的。

指標型別的區別:兩者均存放為同一地址,但前者是指向一維陣列,後者是指向元素的。

實際就是前者每次跳動4*10個位元組,後者每次跳動4個位元組。

5樓:twinkleh丶

a+1應該是 (a+0)+1

這裡的a是二維陣列中的二級指標

陣列名為a[0]的一維陣列(表示行)

也是陣列名為a的一維陣列(表示列)

後面的1表示行陣列移動1行

0表示列的移動

所以是1行0列的地址

*(a+1)中a是二級指標

取值二級指標是一級指標

一級指標指向的一維陣列(二維陣列中的行)

一維陣列移動一位只能是向下移動也就是行,

所以就是 第一行的首地址 也就等於二維陣列中 第一行零列的地址

6樓:tlier丿殘刀

二維陣列又包含多個一維陣列 a指向第一個一維陣列的首地址就還是地址

二維陣列中a 1和*(a 1)的值為什麼都是地址

7樓:匿名使用者

a[0]第0行的行地址

a[1]第1行的行地址

*a[1]第一行的第一個數。

希望下面的程式可以幫到你:

#include

#include

int main(void);

printf("a= %d\t",a);

printf("a+1=%d\n",a+1);

printf("*a= %d\t",*a);

printf("*a+1=%d\n",*a+1);

printf("a[1]=%d\t",a[1]);

printf("*a[1]=%d\n",*a[1]);

system("pause");

return 0;

}執行結果:

二維陣列中,a+i表示第i行的地址,那為什麼*(a+i)也表示第i行的地址。

8樓:鈄運旺登子

二維陣列每行的首地址分別為a[0],a[1]......a[i],*(a+0)是a[0],*(a+1)是a[1]......*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

9樓:匿名使用者

a+i和*(a+i)的值相同沒錯,但它們的型別不一樣,代表的意義也不一樣。a+i還是2維指標,*(a+i)則是一維指標。編譯器對它們的解析和操作是不一樣的。

二維陣列a,劃線的兩句話矛盾嗎?a+1的值是地址的首地址?

10樓:譚智軒

不矛盾啊。一維陣列和二維陣列,對一維陣列,a就是首地址,a加1就是首地址後移一位,當然指向a[1]了。二維陣列的話,a+1就是第二行的首地址。a[1]加1就是第二行第二列

c語言中多維陣列地址**(a+1)怎麼詳細理解?

11樓:匿名使用者

*(p+n)等效於p[n]

所以**(a+1)

=*(*(a+1)+0)

=*(a[1]+0)

=a[1][0]

c語言二維陣列a[i][j],為什麼a[1]和*(a+1)等價啊?*(a+1)為什麼會是一個地址?弄糊塗了,請高手解答

12樓:

*(a+1)指標取得不就是地址嗎

13樓:匿名使用者

*(a+1)是定義的指標,

因為陣列的起始地址a[0]可以用a來代替~

所以a[1]和*(a+1)是同一個地址

14樓:

首先a代表整個陣列的首地址沒問題吧,a+1就是把地址下移,*(a+1)就是取其地址的內容。這回可以理解了吧!

c問題,幫我解釋一下,二維陣列中*(a+i)+j 為什麼表示的是地址?

15樓:匿名使用者

你要明白既然是二維陣列,那麼要得到值的話,肯定要有兩個*,一個*是地址,沒有*也是地址

16樓:匿名使用者

i 行 j 列元素a[i][j]的地址

在二維陣列裡地址a和地址ai的問題

a i 和 a i 表示bai 的是同一個地址,對於陣列來du說,計算zhi機計算地址都dao是以 a i 進行計算,也就是換算內成指標的形式.對於容二維陣列,你要搞清楚所取的地址是對誰而言的.很顯然,a i 是第i行的地址,這是相對於行而言的,也就是說,a i 1 就是下一行的地址了.a i 是不...

在二維陣列中為什麼a0和a是與a是等效的

哈哈 以下標從0開始說。若a是二維陣列名,則a作常指標使用時,a是第0行的指標,a是第0行的第專一個元屬素的指標 二者值同,意義不同 a是第0行的第0個元素的值。這可以用以下 驗證 int main void printf d n a 1 return 0 輸出肯定是4。這說明,既然a是第0行的指標...

在C中怎麼給二維陣列賦值

string其實就是char陣列,讀的時候傳入的只是這個char陣列的首地址.比如 str 256 scanf s str 那麼對於string陣列來說也是一樣 比如你說的 s 10 20 對於這個2維陣列的10個string的首地址就是s 0 s 9 所以讀的時候可以用一個迴圈 for i 0 i...