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了……
2樓:聽不清啊
c語言中二維陣列的a代表是a陣列的首地址(值與0行首地址同),所以*a不是首個元素,*a代表的是0行的首地址,**a才是對首個元素的引用。
3樓:雙子牛總
胃口幾幅畫雞骨頭氣溫會偷偷去hgew
為什麼c語言中二維陣列的陣列名a和*a表示的是同一個值?
4樓:匿名使用者
當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首地址。
於是a的值就是首地址的值。
而*a,就是a[0],a[0]是第一行的標記,代表第一行的首地址。
在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首地址,第一行的首地址,和第一個元素的首地址,即a, a[0], &a[0][0] 都是相同的。
於是a和*a的值是相同的。
5樓:匿名使用者
當a是二維陣列名時,a即&a[0],而*a即a[0]
兩者的顯式的值是相同的,但是基型別是不同的
6樓:匿名使用者
*a表示陣列的第一個元素的值,而二維陣列的第一個元素是一個一維陣列。這個一維陣列的首地址是a[0],所以a = *a = a[0] = &a[0][0]
7樓:艾珽
首先 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和*a有什麼區別?
8樓:匿名使用者
對於二維陣列名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除了值相同外,其它的各方面都是不同的。
9樓:匿名使用者
資料名可以看作指標常量,分配陣列空間時指標值就確定下來了,不像宣告的指標變數那樣,值是不能改變的。*a=a[0],對於二維陣列a[0]也是一個指標,他們都指向陣列的首地址,值都相等,但是,a和a[0]雖然值相等,但對他們進行指標運算時,地址偏移的基礎不同。
10樓:匿名使用者
其實不大 *a就是a[0]都是第一行的地址
11樓:匿名使用者
有無指標指向的區別。
12樓:匿名使用者
a是這個二維資料首地址,*a是第一個元素值。
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】的地址
c語言中 二維陣列@a[i][j]的地址為什麼可以表示成*(a+i)+j難道*(a+i)還表示一個地址的值?求高手詳細解釋
18樓:匿名使用者
依據《c語言深度剖析》「多維陣列與多級指標」章節 原文如下:
以陣列下標的方式來訪問其中的某個元素:a[i][j]。編譯器總是將二維陣列看成是一個
一維陣列,而一維陣列的每一個元素又都是一個陣列。a[3]這個一維陣列的三個元素分別為:
a[0],a[1],a[2]。每個元素的大小為 sizeof(a[0]),即 sizof(char)*4。
由此可以計算出 a[0],a[1],a[2]
三個元素的首地址分別為& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即 a[i]
的首地址為& a[0]+ i*sizof(char)*4。這時候再考慮 a[i]裡面的內容。就本例而言,a[i]內有 4
個 char 型別的元素,其每個元素的首地址分別為&a[i],&a[i]+1*sizof(char),
即 a[i][j]的首地址為&a[i]+j*sizof(char)。再把&a[i]
的值用 a 表示,得到 a[i][j]元素的首地址為:a+ i*sizof(char)*4+ j*sizof(char)。同樣,可以換
算成以指標的形式表示:*(*(a+i)+j)。
19樓:問號朵朵
表達錯誤,差1錯誤:
a[i][j]的地址應該表示為:*(a+i-1)+j-1
例:int a[3][4]; 則:
*(a):表示第一行的首地址,即:(*(a))[0],表示第一行第一個元素地址,值為:*((*(a))[0])。
*(a+1):表示第二行的首地址,即:(*(a+1))[0],表示第二行第一個元素地址,值為:*((*(a+1))[0])。
*(a+2):表示第三行的首地址,即:(*(a+2))[0],表示第三行第一個元素地址,值為:*((*(a+2))[0])。
*(a+3-1)+4-1:表示最後一個元素的地址。它的值是:*(*(a+3-1)+4-1)
20樓:陳宗權
a是一個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的一個元素。
*(a+i)就是a[i],是一個一維陣列,當然表示一個地址,表示這個一維陣列裡面的第一個元素a[i][0]的地址。
21樓:涓涓細流
在這裡,*a[i]是一個指標變數,它指向含j個元素的一維陣列。
為什麼c語言二維陣列a[2][2], a和*a輸出是相同的,都表示一個地址
22樓:自我程式設計
二維陣列可以理解為幾個指向一維陣列的指標組成指標陣列。
所以從型別上講,a是指向指標的指標,*a是指向一行一維陣列的指標。
但a作為陣列名,又表示了陣列首地址(在記憶體中元素地址是連續的)。
*a是第一行陣列首地址。所以值相同
(注意只是值相同,比如a[n]和(*a)[n]意義就不一樣,一個表示第n行的行指標,一個是第一行的第n列)。
23樓:天神在此
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指的是什麼,C語言中,一個二維陣列a59中a4指的是什麼?
二維陣列 a 5 9 中a 4 指的是a 4 0 的地址,a 5 9 相當於有5個一位陣列每個陣列長度為9a 4 相當於第四個陣列的首地址,a 4 1等於a 4 1 滿意請採納,不懂請追問 c語言中,一個二維陣列 a 5 9 中a 4 指的是 a 4 0 a 4 8 的一個一維陣列的首地址,也即是a...
c語言中關於二維陣列指標
二維陣列其實在記憶體中等同於一維陣列,僅僅是在編譯階段就幫你轉換掉了。a 3 4 記憶體分配時等同於a 3 4 上面的 應該改寫成printf d p i 4 j p i j 這種寫法系統理解為先取 p i 取p i該位置的值,假設 i 2,那麼該值就是3,然後再去用3 j,假設j 1,那麼 p i...
c語言二維陣列怎麼表示,C語言二維陣列定義是什麼,然後int a 1 2 是代表什麼意思?怎麼用這個二維陣列
int a m n 就表示一個m行n列的整型二維陣列在c語言中陣列的下標是從0開始的所以,內陣列a的元素個數可以表示為 容a 0 0 a m 1 n 1 例如 include int main return 0 執行結果 1 23 4 4 51 2 3 44 5 int a 3 2 定義的是陣列ba...