c語言中的二維陣列裡a1和a1為什麼都是地址

2021-03-04 09:14:01 字數 4728 閱讀 3598

1樓:劉文正粉絲

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

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

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

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

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

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

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

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

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

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

3樓:twinkleh丶

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

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

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

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

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

0表示列的移動

所以是1行0列的地址

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

取值二級指標是一級指標

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

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

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

4樓:tlier丿殘刀

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

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

5樓:匿名使用者

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

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

c語言二維陣列與指標,我想知道為什麼*(a+1).與顯示中的a+1,所給出的地址是一樣的,怎麼理解?

6樓:

a=&a[0];陣列名相當於指標,等於陣列首地址, 型別為 int(*)[3];

*a= a[0];陣列int a[2][3];二維陣列 a有兩個子陣列,a[0],a[1] ;

有2*3 =6個int型元素 a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[0][2];

就是說定義一個陣列int a[2][3];同時定義了 1+2+6

共九個識別符號,6個整型變數,兩個三個整型元素的一維陣列a[0],a[1] 定義為

;一個二維陣列 a;一共定義了9個名字。

*(a+1)=*(&a[1])=a[1];

a+1=&a[0]+1 =&a[1];

由於並無單獨的儲存空間儲存 a[1] 這個指標(a[1][0]的地址),所以a[1]和&a[1] 除了型別不同外,實際內容是相同的,

&a[1]的型別為 int(*)[3];

a[1]的型別為 int [3]; 也就是int* ;

實際上a,a[0],&a[0][0] 甚至&a的值都是相同的,但是型別不同

a,&a[0];: int [2][3] ==>int (*)[3]; (const ??? int (const ????*)[3])

a[0]; :int [3]==>int *; (const??? )int *;

a[0][0]; : int;

7樓:匿名使用者

a是雙下標變數,相當於定義是int **a; a存放著這個二維陣列的首地址,由於是二維陣列,

a+1實際上是地址a+3*sizeof(int),(其中的3對應著定義int a[2][3];)也就是a[1][0]的首地址

所以*(a+1)還是一個指標,與&a[1][0]是一樣的,a+1是指標,運算結果與前者相同。

8樓:匿名使用者

二維陣列是兩層指標,這個你該明白

*(*(a+i)+j)這個是表示i行的第j個資料,注意啊,是兩個*要是不理解,記住套用即可

一個*是指標

所以ij都是指標

a+1是一個指標,表示第1行的首地址(c中陣列時從0開始計數的)在二維陣列中,

a,a[0],&a[0][0]這三個指標雖然都是a的首地址的值,但是在c中用起來是不一樣的

a表示二維陣列的首地址

a[0]表示第0行的首地址

&a[0][0]表示第0行的第0個元素的地址

9樓:未來需努力點綴

樓主你好

你這裡的a是陣列名

陣列名a是陣列a[2][3]的首地址 也就是a[0][0]的地址那麼a+1就是a[0][1]的地址 *(a+1)對應的就是a[0][1]

希望能幫助你哈

10樓:楊復興

×(a+1)是一個指向 指向(a+1)所以它和a+1的地址是一樣的

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

11樓:

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

12樓:匿名使用者

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

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

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

13樓:

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

c語言 二維陣列 (*(a+1)[1]) 和 *(a+5)分別表達什麼?

14樓:匿名使用者

*(a+1)=a[1]

那麼*(a+1)[1] = a[1][1]

*(a+5) = a[5]

c語言菜鳥求教:請問下面這段解釋中「*(a+1)表示的是陣列a[1]中第一個元素的地址」是不是錯的

15樓:奮力衝

對啊,*(a+1)就是表示a[1]的儲存位置的,*(a+num)表示的實質就是a[num],只是寫法不一樣,*(a+num)更接近本質。

16樓:匿名使用者

他沒錯,你也沒說自錯,但你理解不到位。

*(a+1)是陣列元素。但a是二維陣列,那你就要再進一步理解了。

因為a是二維陣列名,即是一維陣列a[0] 、a[1] 、a[2] 的首地址。

a+1就是 a[1]的地址。

*是取指標的值。

那麼*(a+1)就是取 a[1]的值。

它是什麼呢?它又是一個陣列: a[1][0], a[1][1] ,a[1][2]。

而且 a[1]是它們的首地址。

即 a[1]的值就是 a[1][0]的地址。

17樓:野獸fight美女

是錯的,a表示的是啊a[1]的首地址

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

18樓:自我程式設計

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

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

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

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

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

19樓:天神在此

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語言中二維陣列下標問題,C語言中二維陣列下標問題

a可以理解為二重指標,a 0 理解指標,a 0 0 是對這個地址進行訪問了 其實回 的意義 可以理解成 a i 其實就相當於 a i 所以原答來的就相當於 a i j 的優先順序比 的高 所以外面那個括號可以去掉 就變成了 a i j 明白了嗎?這裡a指的是整個陣列,而a 0 指二維陣列第一行的元素...

c語言中二維陣列它的陣列名是a那a和a有什麼

對於二維陣列名a和 a,二者的區別在於型別不同。對於type a m n 當使用a時,可以等同於二級指標type 型。而使用 a時,等同於type 型。從概念上說,a表示二維陣列a的首地址,而 a表示二維陣列a第一行a 0 的首地址。這樣在使用的時候就有所區別。比如 對a的操作a 4 表示a的第四行...

c語言二維陣列,這裡為什麼a的值是1,不是0嗎

a 2 3 相當於a 0 0 1 a 0 1 0 a 0 2 0 a 1 0 4 a 1 1 5 a 1 2 0 c語言中二維陣列的a代表是0行首地址,那 a不就是首個元素嗎,為什麼 a代表的還是首個元素的地址 哈哈!以下標從0開始說。若a是二維陣列名,則a作常指標使用時,a是第0行的指標,a是第0...