c問題,幫我解釋一下,二維陣列中 a i j為什麼表示的是地址

2021-03-22 08:17:09 字數 4294 閱讀 9724

1樓:匿名使用者

你要明白既然是二維陣列,那麼要得到值的話,肯定要有兩個*,一個*是地址,沒有*也是地址

2樓:匿名使用者

i 行 j 列元素a[i][j]的地址

c語言中 二維陣列@a[i][j]的地址為什麼可以表示成*(a+i)+j難道*(a+i)還表示一個地址的值?求高手詳細解釋

3樓:匿名使用者

依據《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)。

4樓:問號朵朵

表達錯誤,差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)

5樓:陳宗權

a是一個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的一個元素。

*(a+i)就是a[i],是一個一維陣列,當然表示一個地址,表示這個一維陣列裡面的第一個元素a[i][0]的地址。

6樓:涓涓細流

在這裡,*a[i]是一個指標變數,它指向含j個元素的一維陣列。

為什麼c語言中*(a+i)+j能表示a[i][j]的地址

7樓:

int a[3][4]; //假設定義一個3行4列的二維陣列,所謂二維陣列就是陣列的陣列

a[0]、a[1]、a[2]是陣列a的元素,而這個元素是陣列,而不是我們通常認為的基本資料型別的資料

所以*(a+i)就是獲取陣列a中第i個元素,等價於a[i],而a[i]本身又是一個包含有4個int型數值的陣列,a[i]是這個一維陣列的陣列名,我們知道陣列名的本質是一個地址,是陣列首元素地址,所以

*(a+i)+j就是表示下表第i行的第j個元素的地址了。所以,

*(a+i)+j表示的含義是元素a[i][j]的地址,也可以用a[i]+j來表示。

8樓:聽不清啊

int a[2][3]=;

printf("%d ",*(*(a+1)+2));

以上的引用能夠輸出60

因為a是二維陣列名,所以它是指向指標的指標(二級指標)。

*(a+1)就是a[1],它是一個一維陣列,也是一維陣列的首地址(指向一維陣列首元素的指標)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。

9樓:匿名使用者

*(a+0)取出a[0]的值

a[0]的元素又是一個一維陣列

因此*(a+0)取出的就是這個一維元素的首地址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的地址

*(a+0)+1表示一維陣列的1號陣列元素的地址

二維陣列中*(a+i)是什麼意思

10樓:匿名使用者

在c語言中規定,陣列名代表的是陣列首元素地址。a是二維陣列的陣列名,因此,在二維陣列中*(a+i)表示的是第i+1行0列元素的地址,即a[i][0]的地址。而a+i表示的是第i+1行的首地址。

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

11樓:理科女

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

12樓:暴躁內酷

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

13樓:匿名使用者

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

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

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

14樓:匿名使用者

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

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

15樓:

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)

16樓:匿名使用者

a應該是指的陣列名字吧

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

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

也就是a[i]

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

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

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

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

17樓:賽罡諫陽澤

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

*(a+i)+j)的

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

關於對陣列元素a[i][j]的引用:*(*(a+i)+j)為什麼也正確呢,*(a+i)等價於a[i]麼?

18樓:匿名使用者

首先a是二維數

組的首地址

,也是二維陣列第一行的首地址,是個常量指標,a[i]也是地址,表示第 i 行的地址,

a+i表示相對於地址a偏移 i 個單位的地址,與a[i]等同,*(a + i)表示對 相對於地址a偏移 i 個單位的地址 取內容,即表示對a[i] 的地址 再取內容,因為a[i] 與&a[i]等同,所以取出的為a[i]的地址,也與a[i]等同,為同一地址。

而*(*(a+i)+j)表示二維陣列第 i 行第 j 列的元素,與a[i][j]等同。

c++題目, 假定a是一個二維陣列,則a【i】【j】的指標訪問方式為什麼?

19樓:匿名使用者

二維指標是指向指標的指標...

比方說int a[2][2];

那麼 a就是一個指標,他的值指向a[0],即a[0]的記憶體地址.

a[0]也是一個指標,所以a是一個指向指標的指標.

a[0]的值指向a[0][0],即a[0][0]的地址.

如果將陣列用指標訪問的話:

a[i][j] = *(*(a+i)+j)同理,多維陣列的訪問:

a[i][j]...[z]=*(*(...*(a+i)+j)...+z)

c語言問題 c語言中二維陣列在記憶體中怎樣儲存

嚴格意義上說不存在copy二維bai陣列,只是陣列裡的每du個元素是一個一zhi維陣列,而記憶體是一段連續dao的空間,根據你申請一個變數的順序按地址從低到高排,所以二維陣列不可能像一個矩陣那樣在記憶體中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在c 中是按行,既 int a 2 2 a...

幫我解釋一下E hv E mc,幫我解釋一下E hv E mc

1.e1代表的是光子能量bai du,h普朗克常數,v是光波頻率.e0代表核zhi能,m是核變中dao的質量損耗,c是光版速.2.兩個公式分別用於光子能權 量的計算和核裂變和聚變過程中放出能量的多少,由於能量是可以相互轉化的,加上核裂變聚變也會放出光子,所以這部分能量中包含光子能量.3.這個在高2,...

c 裡一維陣列名,是個指標,那二維陣列名呢

如果把陣列名當作引數傳遞給函式時,那麼編譯器將認為傳遞的是指標。在函式中同樣可以操作該指標,訪問陣列元素,不管它是多少維陣列。比如 int iarray 10 void f1 int p1 如果這樣呼叫f1 iarray 那麼p1 0 等於iarray 0 p1 1 等於iarray 1 以此類推 ...