為什麼C語言中二維陣列的陣列名a和a表示的是同值

2021-03-07 09:29:20 字數 5276 閱讀 2760

1樓:匿名使用者

當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首位址。

於是a的值就是首位址的值。

而*a,就是a[0],a[0]是第一行的標記,代表第一行的首位址。

在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a, a[0], &a[0][0] 都是相同的。

於是a和*a的值是相同的。

2樓:匿名使用者

當a是二維陣列名時,a即&a[0],而*a即a[0]

兩者的顯式的值是相同的,但是基型別是不同的

3樓:匿名使用者

*a表示陣列的第乙個元素的值,而二維陣列的第乙個元素是乙個一維陣列。這個一維陣列的首位址是a[0],所以a = *a = a[0] = &a[0][0]

4樓:艾珽

首先 a[0] 和 *(a+0)等價,且 a[i]只是乙個位址(如同一維陣列名 只是乙個指標常量)

這些你得知道。

在a[m]中,

a為二維陣列名,值為0行首位址;

a[0] 和 *a 為      0行0列的位址。

*(a[i]+j)和*(*(a+i)+j) 才是 a[i][j]的值。

為什麼c語言中二維陣列的陣列名a和*a表示的是同乙個值?

5樓:匿名使用者

當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首位址。

於是a的值就是首位址的值。

而*a,就是a[0],a[0]是第一行的標記,代表第一行的首位址。

在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a, a[0], &a[0][0] 都是相同的。

於是a和*a的值是相同的。

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

6樓:匿名使用者

對於二維陣列名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除了值相同外,其它的各方面都是不同的。

7樓:匿名使用者

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

8樓:匿名使用者

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

9樓:匿名使用者

有無指標指向的區別。

10樓:匿名使用者

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

為什麼c語言二維陣列a[2][2], a和*a輸出是相同的,都表示乙個位址

11樓:自我程式設計

二維陣列可以理解為幾個指向一維陣列的指標組成指標陣列。

所以從型別上講,a是指向指標的指標,*a是指向一行一維陣列的指標。

但a作為陣列名,又表示了陣列首位址(在記憶體中元素位址是連續的)。

*a是第一行陣列首位址。所以值相同

(注意只是值相同,比如a[n]和(*a)[n]意義就不一樣,乙個表示第n行的行指標,乙個是第一行的第n列)。

12樓:天神在此

a指的是這個二維陣列第一維陣列的首位址,即&a[0] (a+1就是&a[1])

*a指的是這個二維陣列的首位址,即&a[0][0] (*a+1就是&a[0][1])

**a指的是這個二維陣列第一維陣列的首位址指向的值,也就是a[0][0]的值,不是指標

a與*a的值是一樣的,因為&a[0]與&a[0][0]是一樣的以下是位址對應關係

a等於&a[0]等於&a[0][0]

a+1等於&a[1]等於&a[1][0]

*a等於&a[0][0]

(*a+1)等於&a[0][1]

*(a+1)等於&a[1][0]

[*(a+1)+1]等於&a[1][1]

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

13樓:匿名使用者

在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等同於一維指標。二者型別並不相同,只是在一定條件下可以轉換。

14樓:匿名使用者

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

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

15樓:匿名使用者

#include "stdio.h"

main()

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

這裡涉及到2個問題:

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

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

16樓:

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

17樓:匿名使用者

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

*(a+1)[2] 在c語言中表示什麼意思,其中a 是乙個二維陣列的陣列名,請解

18樓:

是下標為[3][0]的那個元素的值。因為的優先順序比*高,所以*(a+1)[2]被解釋為*((a+1)[2])——二維陣列a中,a是第0行的第0個元素的位址,a+1自然是第1行的第0個元素的位址,(a+1)[2]實際上就是再向後移兩行那一行的元素指標,可用*(a+1+2)=*(a+3)表示,所以是第3行的第0個元素的位址;那麼*(a+1)[2]實質上就是**(a+3),顯然,它是第3行第0個元素。比如有int a[4][4]=,,,},那麼*(a+1)[2]就是13。

行、列下標都從0起算。供參考!

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

19樓:劉文正粉絲

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

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

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

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

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

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

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

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

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

20樓: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個位元組。

21樓:twinkleh丶

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

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

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

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

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

0表示列的移動

所以是1行0列的位址

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

取值二級指標是一級指標

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

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

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

22樓:tlier丿殘刀

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

c語言中的二維陣列裡a+1和*(a+1)為什麼相等?

23樓:匿名使用者

它們只是值相等,但型別不相等,不能說它們相等。

a+1是int **型別,指向的是陣列a的第二行的起始位址; *(a+1)是int *型,指向的是陣列a的第二行第乙個元素的位址。

為什麼c語言裡面二維陣列a[][],a,a[0],*a,*(a 0)值相等

24樓:匿名使用者

沒學過c,我猜一下,你定義了乙個二位陣列後,就會有乙個指標指二維陣列的首位址,上面的各種表達樣式都是說明的這個指標,而沒有改變這個指標的指向,所以值是相同的

c語言中二維陣列名是不是可以看作指標陣列名

不可以,二維陣列要看做 陣列的陣列 以如下定義為例 int a 4 int p 給你個對於指標和陣列的正確理解吧 定義的不同 c 裡,指標和陣列是不同的型別,不要把陣列名看做 常指標 所以 sizeof a 和 sizeof p 值是不同的。操作 除宣告外,中括號操作符僅用於指標,如 p 0 p 5...

二維陣列名和指標的關係,C語言中陣列名和指標的區別

二維陣列名即陣列地址,指向首行地址,表面上看,行地址即一維陣列指標,而陣列名指向行就應該是指標的指標,但是必須注意指標也是有型別的,型別不同資料寬度也不同。如果a 10 10 假設int p a 那麼要對行遞增執行p 時,編譯器如何知道列寬?因為int 是指指向一個 int 型別的指標,32位系統中...

C語言指標與二維陣列求解,c語言中二維陣列的指標如何表示

假設a是乙個二維陣列,則一 a是第乙個一維陣列名,陣列名 就是該陣列的 首位址!二 a 0 和 a都表示這個一維陣列第乙個元素的內容 這句話有問題,應該是 都表示這個 二維陣列 第乙個元素的內容!三 a和a好像不等價啊?關於陣列名和 陣列名書上有明確的介紹與說明 a a a 0 a 0 這是規定!細...