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

2021-03-03 21:53:11 字數 2981 閱讀 6034

1樓:匿名使用者

哈哈!以下標從0開始說。若a是二維陣列名,則a作常指標使用時,a是第0行的指標,*a是第0行的第專一個元屬素的指標(二者值同,意義不同),**a是第0行的第0個元素的值。

這可以用以下**驗證:

int main(void);

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

return 0;

}輸出肯定是4。這說明,既然a是第0行的指標,那麼a+1就是第1行的指標,*(a+1)則是第1行第0個元素的指標,**(a+1)當然就是第1行第0個元素的值4了......

c語言:通過指標引用多維陣列一節中,二維陣列a[0]和*(a+0)等價,怎麼理解?

2樓:匿名使用者

理解這個問題的要點是: 二維陣列是 元素為一維陣列的一維陣列。

於是回a[0]是作為二維陣列答

首元素的一維陣列名,所以a[0]表示一維陣列(實際是二維陣列首行)首元素的地址,即,a[0]是a[0][0]的地址;

陣列名a是指標,指向其首元素(a[0]),即其值為&a[0](&a[0]指向a[0][0]),所以*(a)(即*(a+0))指向指向a[0][0];所以,a[0]與*(a+0)等價,都是指向a[0][0]。

不知這樣說能不能理解。

3樓:c_walk小三

都表示第0+1行的首地址

c語言中二維陣列a[i][j],為什麼a=*a?

4樓:匿名使用者

在c語言中,二者是相同的地址值。所以可以說a=*a.

二維陣列a定義為a[i][j]時,代表一組資料,有i行j列,共計i*j的元素。

這組資料在記憶體中是連續存放的。而在c語言的使用中,a是二維陣列的首地址。*a也就是a[0],是二維陣列第一行的首地址。

所以,二者是相同的地址值,即資料a[0][0]的地址值。

也就是說,從值上,a,*a, a[0],&a[0][0]都是相同的值。

當時,說a=*a也並不是完全正確的,從型別上,a等同於二維指標,而*a等同於一維指標。二者型別並不相同,只是在一定條件下可以轉換。

5樓:匿名使用者

我理解問題中的這個=樓主是指相等,而且是數值上相等。這是肯定的。*a實際是*(a+0)+0,也即是a[0]+0這個地址,和a一樣,其數值也是這個二維陣列的首地址。

但是二者含義可不同,不能直接相互賦值。a是行指標,即a是一個大小為i的陣列,其元素也是陣列,大小為j。*a由上面的解釋,其實質是個列指標,指向a的第一個元素(大小為j的陣列)的第0個元素。

6樓:匿名使用者

#include "stdio.h"

main()

} 正確的寫法應該是上面這樣的。

這裡涉及到2個問題:

1.陣列宣告的時候a[9]就是有9個元素的陣列,a[10]就是有10和元素的陣列

2.陣列賦值的時候第一個元素的下標是從0開始的,即a[0],最後一個下標是宣告時的數字-1,如:宣告時:a[9],最後一個元素是a[8]。a[9]是超範圍的。

7樓:

陣列名a表示二維陣列的首地址,*a就好比第一行的地址值a[0],a[0]表示&a[0][0]....

8樓:匿名使用者

二維陣列的指標比較特別,* 的作用是將行指標轉換成列指標,陣列名a是指向第一行的指標,*a則是指向第一行第一列的指標,根本含義上市不一樣的,但是值都是a【0】【0】的地址

c語言中一個二維陣列 它的陣列名是a 那a和*a有什麼區別?

9樓:匿名使用者

對於二維陣列名a和*a,二者的區別在於型別不同。

對於type a[m][n];

當使用a時,可以等同於二級指標type **型。

而使用*a時,等同於type*型。

從概念上說,a表示二維陣列a的首地址,而*a表示二維陣列a第一行a[0]的首地址。這樣在使用的時候就有所區別。比如 對a的操作a[4]表示a的第四行首地址,而對*a的操作(*a)[4]則代表第一行的第4個元素,即a[0][4]。

所以a和*a除了值相同外,其它的各方面都是不同的。

10樓:匿名使用者

資料名可以看作指標常量,分配陣列空間時指標值就確定下來了,不像宣告的指標變數那樣,值是不能改變的。*a=a[0],對於二維陣列a[0]也是一個指標,他們都指向陣列的首地址,值都相等,但是,a和a[0]雖然值相等,但對他們進行指標運算時,地址偏移的基礎不同。

11樓:匿名使用者

其實不大 *a就是a[0]都是第一行的地址

12樓:匿名使用者

有無指標指向的區別。

13樓:匿名使用者

a是這個二維資料首地址,*a是第一個元素值。

c語言中二維陣列的a代表是0行首地址,那*a不就是首個元素嗎,為什麼*a代表的還是首個元素的地址

14樓:

哈哈!以下標從0開始說。若a是二維陣列名,則a作常指標使用時,a是第0行的指標,*a是第0行的第一個元素的指標(二者值同,意義不同),**a是第0行的第0個元素的值。

這可以用以下**驗證:

int main(void);

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

return 0;

}輸出肯定是4。這說明,既然a是第0行的指標,那麼a+1就是第1行的指標,*(a+1)則是第1行第0個元素的指標,**(a+1)當然就是第1行第0個元素的值4了......

15樓:聽不清啊

c語言中二維陣列的a代表是a陣列的首地址(值與0行首地址同),所以*a不是首個元素,*a代表的是0行的首地址,**a才是對首個元素的引用。

16樓:雙子牛總

胃口幾幅畫雞骨頭氣溫會偷偷去hgew

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

a相當於是a 0 0 的地址 不是的,a 1是地址,a 1 是取a 1這個地址的值a 1是a 0 1 的地址 a 1 相當於是a 0 1 所以輸出2 對,是地址,a i 是第i行的首地址 其實你那個是簡化了,嚴格的來說應該這麼寫 printf d n a 1 0 c語言中的二維陣列裡a 1和 a 1...

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

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

二維陣列的元素在儲存器中是如何儲存的

二維陣列在記憶體中按行存放。二維陣列在c語言中的定義為 int a x y 具體理解為二維陣列a,有x行資料,每行資料有y個。解釋 當我們在進行資料的存取時,在無x的條件下不可能取出值。但是在沒有y的條件下,可以通過地址取出x行的某個值。當我們知道x的值,代表我們能確定這一行的首地址,因為二維陣列按...