為什麼C語言二維陣列a 2a和a輸出是相同的,都表示地址

2021-03-28 02:06:39 字數 3125 閱讀 6757

1樓:自我程式設計

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

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

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

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

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

2樓:天神在此

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]

請問二維陣列a[2][2] 為什麼a和*a輸出結果一樣?

3樓:馮凱在**

是一樣的,a表示二維陣列的首地址,*a是把二維陣列看成一維陣列後的首地址,但其實和a指向的地址一樣

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

4樓:匿名使用者

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

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

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

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

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

c語言 為什麼*a和a指向同一個地址?*a不是取地址裡面的內容嗎,就是取值。看不懂

5樓:

c語言裡二維陣列是一維陣列所組成的陣列

short a[3][4]; 有3個元素,每個元素都是由回4個short組成的答

陣列,注意,每個元素都是陣列

*a就是a[0], 有上面說的可知,a[0]是個陣列,那自然就是個地址了

可以再加一句:

printf("%d\n",**a); // 這個就是a[0][0]了

6樓:匿名使用者

這涉及到多級指標,a是地址,*a取到的是行的首地址,也就是a[0],如果要取值要用二級指標,**a=a[0][0]

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

7樓:

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;

8樓:匿名使用者

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是指標,運算結果與前者相同。

9樓:匿名使用者

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

*(*(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個元素的地址

10樓:未來需努力點綴

樓主你好

你這裡的a是陣列名

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

希望能幫助你哈

11樓:楊復興

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

c語言二維陣列迴圈賦值,C語言二維陣列迴圈賦值

這個只是陣列值的大小和行列的關係而已 就代表改數的值等於所在行數的4倍加所在列數加1 c語言中怎樣實現對二維陣列元素進行賦值並輸出。可以按照下面步驟進行定義二維陣列並輸出 1 定義二維指標。2 確定內陣列維數,即行數容和列數。3 申請行數個一維指標大小空間,並賦值給二維指標。4 對於每個一維指,申請...

c語言二維陣列的賦值,c語言有關二維陣列變數初始化

1 首先在電腦上開啟抄c語言程式設計軟襲件。然後建立專案。2 然後匯入stdio.h和stdlib包。再加入malloc包。3 然後定義五個引數。再建立其中兩個引數的空間。4 然後用for語句進行迴圈。再用scanf語句進行接收輸入到二維陣列。5 然後用兩個for語言迴圈。再輸出二維陣列的數值。6 ...

c語言輸入整型二維陣列a,計算該二維陣列中的最

include void main int a 3 4 max,maxi 0,maxj 0,i,j printf 請輸入 n for i 0 i 3 i for j 0 j 4 j scanf d a i j max a 0 0 for i 0 i 3 i for j 0 j 4 j if max中...