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...