c語言中ai是位址嗎書上說ai是ai的指標既然這

2021-03-07 09:29:20 字數 4783 閱讀 8835

1樓:

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)

2樓:匿名使用者

a應該是指的陣列名字吧

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

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

也就是a[i]

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

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

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

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

3樓:賽罡諫陽澤

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

*(a+i)+j)的

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

c語言中二維陣列的引用和位址有什麼區別嗎?比如a[i]位址&a[i],a+i,p+i,引用a[i],*(a+i)(這不應該是位址

4樓:處男者

你這種情況比較複雜!乙個陣列名本身是乙個常量位址,比如陣列a[10],a就是該陣列在記憶體分配空間的起始位址。要引用陣列中各個元素。

a[i]是陣列專用的方法,它本身就是指a往後偏移i個長度記憶體空間裡存放的內容,因此用&取位址就變成了該內容對應的位址;也可以用*(a+i),a+i指從位址a偏移i個長度(此長度不是位元組,取決於陣列儲存的元素型別)的位址(注意此時它不是指裡面的內容),因此加上*以取到裡面的內容。

也就是說a[i]指內容,因此可以用&取其位址;而a+i指位址,因此可以用*取其內容,二者形式不同,都可以一樣用。

我是這樣理解的,僅供參考。

c語言中一維陣列a[i]的位址到底是a+i還是a+i*sizeof(int)?

5樓:

如果a是int型陣列來,設a的地自

址是0,由於int是4位元組,那麼a+2就是位址8;編譯器把a+2自動理解為a+2*sizeof(int),如果寫成a+2*sizeof(int),那麼上例中的位址就是32(因為a+2*sizeof(int)=a+8,編譯器理解為a+8*4)而不是8了。所以a+2和a+2*sizeof(int)絕不是同一位址。也可以這樣說,寫a+2,編譯器認為是a+2*sizeof(int);而如果寫a+2*sizeof(int),則編譯器認為是a+2*sizeof(int)*sizeof(int)!

6樓:匿名使用者

試試不就知道了?編譯器會根據元素型別來決定步長.

#include

int main (void)

我的內結果是一樣的容.

7樓:匿名使用者

a+i*sizeof(int)

i 表示移動i個單位。。。單位大小取決於指標型別

c語言中二維陣列的引用和位址有什麼區別嗎?比如a[i]位址&a[i],a+i,p+i,引用a[i],*(a+i)(這不應該是位址嗎

8樓:焚書煮面帥

你這種情況比較複雜!乙個陣列

名本身是乙個常量位址,比如陣列a[10],a就是該陣列在記憶體分配空間的起始位址。要引用陣列中各個元素。a[i]是陣列專用的方法,它本身就是指a往後偏移i個長度記憶體空間裡存放的內容,因此用&取位址就變成了該內容對應的位址;也可以用*(a+i),a+i指從位址a偏移i個長度(此長度不是位元組,取決於陣列儲存的元素型別)的位址(注意此時它不是指裡面的內容),因此加上*以取到裡面的內容。

也就是說a[i]指內容,因此可以用&取其位址;而a+i指位址,因此可以用*取其內容,二者形式不同,都可以一樣用。

我是這樣理解的,僅供參考。

c語言書上說a(i)和*(a+i)等價,我覺得不對啊

9樓:金色潛鳥

注意方括號和小括號。一維二維不要混淆。

c語言 語句中,方括號 不是標點符號,而是 運算子.

c語言 語句中,有恒等式: a[i] = *(a+i)a[i][j] 等於 (a[i])[j] 套恒等式公式,化成 ( *(a+i) )[j], 再化成 * (*(a+i) + j);

類似地 a[j][i] 等於 (a[j])[i],套恒等式公式,化成 ( *(a+j) )[i] ,再化成 * (*(a+j) + i);

求位址 用 & 運算:

1 維:& (a[i]) = & ( *(a+i) ); 注意 &* 抵消, 得 &a[i] = (a+i )

2維; &(a[i][j]) = (*(a+i) + j);

2維; &(a[j][i]) = (*(a+j) + i);

******************************=2 維:

a(i)等價於&a(i)(0) --- 不是小括號,是方括號,用於2 維 下標變數時的 a[i] 等價於 &a[i][0]a[i] 是第 i 行 的 首位址,等價於 &a[i][0]

10樓:運命に抗

書上是對的,你的理解完全錯了。

a[i]並不等價於&a[i][0]。

&a[0]等價於a;

&a[i]等價於a+i

同時取值

*(&a[i])等價於*(a+1);

其中*(&a[i])的*&抵消就是你書上說的 a[i]等價於*(a+1);

*(a+i)與a[i]是一樣的位址,為什麼?

11樓:匿名使用者

這麼說吧,*(a+i)與這個位址存的引數等效,*的意思是根據指標這個位址調出這個位址上的值。那麼,說是位址也沒有錯,只能說不是很嚴謹。

12樓:匿名使用者

你內個說法有點錯誤

c++二維陣列指標中

a+i 表示陣列a的第i行第0列元素的位址*(a+i)表示陣列a的第i行第0列元素的值估計你內個是書上印錯了,教科書各種錯,例題**也各種錯,你得自己根據定義去理解,它只是說個大概意思

13樓:匿名使用者

不是的,給*p賦值,並不是直接賦給它數值,而是賦給他乙個位址,比如說:*p=&i,那麼就給*p賦給了i的記憶體位址,系統在讀取到記憶體位址之後再讀出該記憶體所存的數值,而*p的記憶體位址等於i的記憶體位址,所以*p的數值與i的數值是一樣的,雖然 在賦值語句之後,*p等價於i, 但是不能說直接把數值賦了*p。*p=&i的含義是變數i的位址作為乙個資料存放在指標變數p所對應的記憶體單元中。

c語言指標*(*(a+i)+j)什麼意思,*(a+i)為什麼是位址啊,a不應該已經是位址了麼,a+i為什麼不是位址

14樓:匿名使用者

沒有上下文,你的「a不應該已經是位址了麼」毫無根據。

「a+i為什麼不是位址」

從這裡的用法來看,a+i就是位址。

你對「位址」「資料」的概念還是一團漿糊啊。位址其實也是資料的一種。

15樓:匿名使用者

其實是可以把*(*(a+i)+j)看出是二維陣列的乙個值:a[i][j]。

*(a+i)看出a[i]這是一維位址,a是二維位址。

對於a+1不好判斷,以陣列解釋不通,以指標又解釋德通,我就不評價了。

16樓:蟹黃_包

看起來像是取乙個叫a的二維陣列第i行第j列的值。

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

17樓:

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來表示。

18樓:聽不清啊

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]。

19樓:匿名使用者

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

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

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

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

c語言中*(a+i)與a[i]是等價的。那麼*(a+i)是值還是位址?

20樓:匿名使用者

*(a+i)就是值了

*(*(a+i)+j)才和a[i][j]等價

ai與a i什麼意思,C語言中a i a i 什麼意思

a i 相當於i i 1 a i a i 1 即先對 i 減1,再返回a i 的值,最後對a i 的值增1。已知a i 2 則執行a i 後,返回a 1 的值38,i為1,a a i 先返回a i 的值作為整個表示式的值,然後對a i 增1a i 2 執行a i 後,返回a 2 的值65,i為2,a...

c語言中a 0和a i0有沒有區別

a i 0和a i 0 是有區別的,也是有相同點的,下面分兩種情況討論如下 1 陣列a是數值型 以內int為例 容 int a 4 a 0 0 a 1 0 printf d n a 0 輸出0 printf d n a 1 輸出0 上面的結果是相同的,即對於數值型陣列,兩者是一樣的。2 陣列a是字元...

C語言中0349是常量嗎

c語言中0349不是乙個合法的常量。以0開始的數字,表示是乙個八進位制數,但八進位制數的每乙個字元都不大於7的。不是,0開頭,說明是八進位制數,八進位制數里沒有9出現 西遼人為什麼簞食壺漿,以迎蒙古大軍 1反抗屈出律 2蒙古軍中的許多契丹人肯定也起了溝通作用。3大石林牙早年在蒙古高原召集七州十八部,...