為什麼二維陣列a和a,為什麼二維陣列a i 和 a i 相等

2021-05-18 12:11:08 字數 3941 閱讀 4419

1樓:匿名使用者

在記憶體中二復維陣列

是一行制一行儲存的,即本例中4個4個的儲存。

那麼陣列的開頭,即可以是陣列第一個元素的位置,可以是陣列的首地址,也可以是第一行的首地址。如圖

即a[0][0] 是二維陣列的第一個元素,也是第 0 行的第一個元素,他們的位置是一樣的所以地址也必然是相同的。

a = a[0] = &a[0] = &a[0][0];

舉例: i=1;

a[i] 就表示的是第 i 行的首地址,也就是 a[i][0]這個元素所在的地址;

&a[i] 取得a[i][0]的地址,它和首地址是一個位置,那麼地址肯定是相同的;

a+i,就是a 偏移i 個單位,在本質上是和 a[i]一樣的,a[i]的理解就應該是a 偏移i 個單位;

2樓:記住一座城

準確的說bai

是他們的地址相同,但含

du義不同

zhi。a+i是行指標,而a[1],*(a+i)是列指標。dao因為記憶體空間是一

內維的,不管是幾容維陣列,在記憶體中儲存時都是一維的,但可以以不同的形式表示:比如a[3][3]在記憶體中的儲存形式為0,1,2,3,4,5,6,7,8

a是行指標地址是0,a[0]是列指標還是0。

3樓:匿名使用者

表示& and的 意思

二維陣列中,a+i表示第i行的地址,那為什麼*(a+i)也表示第i行的地址。

4樓:鈄運旺登子

二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

5樓:匿名使用者

a+i和*(a+i)的值相同沒錯,但它們的型別不一樣,代表的意義也不一樣。a+i還是2維指標,*(a+i)則是一維指標。編譯器對它們的解析和操作是不一樣的。

為什麼.一個陣列元素a[i]與a+i的表示等價?

6樓:匿名使用者

a是儲存的是陣列首地址,*a指向的就是陣列第一個元素a[0],所以*(a+i)的地址和a[i]的地址一樣。陣列和指標在一定程度上本質是一樣的。

7樓:

只有a是二維陣列時,a[i]與a+i才等價,他們都表示第i行的首地址,且型別相同。當a為一維陣列時,他們並不等價。

8樓:司燕舞景鑫

不等價吧

*(a+i)與a[i]等價

因為可以理解陣列是特殊的地址常量

a代表a[0]的地址

a+1就是地址+1

是a[1]……

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

9樓:匿名使用者

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

10樓:匿名使用者

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

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

11樓:匿名使用者

#include "stdio.h"

main()

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

這裡涉及到2個問題:

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

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

12樓:

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

13樓:匿名使用者

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

c語言中二維陣列a[i][j]中,a+i=*(a+i)=a[i]=&a[i]是怎麼理解的.

14樓:理科女

a+i=*(a+i)=a[i]=&a[i]&a[i] 和a+i是獲取i行陣列的首地址a[i] 和*(a+i)是訪問第i行的陣列望採納!!

15樓:暴躁內酷

樓主 這幾個不是相等的 其中a+i和&a[i]都是表示的記憶體地址 而*(a+i)和a[i]是取值。

16樓:匿名使用者

首先,a表示地址,a+i 表示相對於地址a偏移 i 個單位的地址,即,a + i 也是地址

a[i]表示第幾行的地址

&a[i]表示對第i行的地址再取地址。

17樓:匿名使用者

&a[i] 和a+i是獲取i行陣列的首地址

二組陣列與指標中a[i]和*(a+i)等價問題

18樓:兩隻羊

你要記住 a[i]和*(a+i)等價的,但在二維陣列中表示的是 地址。

在一位陣列中是直。

你可以這樣理解,

一個一位陣列,他的每個元素都是一個陣列,那他就是一個二維陣列,那麼a[i]或*(a+i)就表示相應的那個元素,而這個元素是一個陣列,

當然a[i]或*(a+i)指的就是這一陣列的首地址,以此推之,a[i]+j或*(a+i)+j就是&a[i][j]

19樓:

*在指標面前是值,就是把他當成一位陣列來理解,a是一個首地址,首地址+1,就是在首地址後加一個儲存單元。所已相等

c語言中a+i是地址嗎,書上說a+i是a[i]的指標,既然這樣,那麼*(a+i)為什麼還是

20樓:

a+i其實就是&a[i],肯定是地址

*(a+i)其實就是a[i],如果a是二給陣列的陣列名,a[i]就肯定是地址(等同於&a[i][0]),如果a只是一維陣列(指標陣列除外)的陣列名,a[i]就不是地址(原因是:二維陣列可以看作是多個一維陣列組成,即陣列的陣列)

*(a+i)+j就是&a[i][j],如果陣列a是二維陣列那就肯定也是地址啦

a[i][j]則是表示為*(*(a+i)+j)

21樓:匿名使用者

a應該是指的陣列名字吧

你首先應該知道陣列名字本身就是地址了

a+i是說a的地址向後在移動i個位置

也就是a[i]

a是指的陣列的首地址,開頭的位置

*(a+i) 也就是*a[i] 也就是a[i]的地址,只是這個地址離首地址偏移了i位置

再加上j 就是 a[i][j]地址

*(a+i)+j是針對二維陣列來說的,也可以說是特殊的一維陣列。

22樓:賽罡諫陽澤

是地址,你要取值是要*(

*(a+i)+j)的

*(a+i)其實就是a[i][0]的地址

vb 二維陣列宣告問題,VB 二維陣列宣告問題

vb規定,dim 陣列必須要求常數表示式,否則會出錯。但此問題可以這樣解決 dim m1 as integer,m2 as integerdim a as integer dim b as integer dim c as integer m1 2 這裡可以改為m1,m2從資料庫中讀取的數值m2 2...

為什麼在c語言中二維陣列第二維下標可以越界

因為陣列是連續儲存的,所以a 0 3 就是第四個儲存的資料,你可以試試a 0 4 越界復是肯定的,但是越界不代表程 制序會出 bai錯,你這個地方越界du後訪問的正好是下一個元素4,是zhi一個dao有效值,所以不會出錯。可以試試訪問a 3 3 這個時候不一定會訪問到什麼東西,這時就很容易出現記憶體...

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