c語言書上說ai和ai等價,我覺得不對啊

2021-03-07 09:29:21 字數 3542 閱讀 1341

1樓:金色潛鳥

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

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]

2樓:運命に抗

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

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

&a[0]等價於a;

&a[i]等價於a+i

同時取值

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

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

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

3樓:

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)

4樓:匿名使用者

a應該是指的陣列名字吧

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

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

也就是a[i]

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

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

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

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

5樓:賽罡諫陽澤

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

*(a+i)+j)的

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

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

6樓:匿名使用者

*(a+i)就是值了

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

c語言中{t=*(a+i); *(a+i)=*(a+j); *(a+j)=t;}代表什麼意思啊 謝謝了

7樓:匿名使用者

a是一個指標,a+i表示a所指位置的下i個記憶體區,a+j同理。這個程式的功能是: 交換 a+i 和 a+j 所指記憶體內區的內容,

容t是中間變數。 就好像你要交換兩瓶飲料,一瓶汽水,一瓶果汁,交換它們,要找一個空瓶子,這裡,t就是空瓶子 a+i 和 a+j 就是你要交換的兩瓶飲料,一共要倒三次,你懂了吧!

8樓:匿名使用者

交換資料。交換(a+i)所指的元素和(a+j)所指的元素的值,用的是「水桶演算法」。

9樓:匿名使用者

通過中間變數t,交換變數i和j 的值

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

10樓:兩隻羊

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

在一位陣列中是直。

你可以這樣理解,

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

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

11樓:

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

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

12樓:匿名使用者

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

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

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

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

13樓:匿名使用者

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

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

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

14樓:蟹黃_包

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

有二位陣列a[n][m] 對於指標問題 *(*(a+i)+j) 與 a[i][j] 為什麼等價 (

15樓:

a[i][j]是第i行(0算起)第j列(0算起)的元素值。a+i是第i行的行指標,那麼*(a+i)就是第i行第0個元素的指標,自然*(a+i)+j就是第i行的第j個元素的指標了,最後通過這個指標用*取出來的值*(*(a+i)+j)不就是第i行第j列的值嗎?這當然就和a[i][j]完全是一回事了……

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

16樓:理科女

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

17樓:暴躁內酷

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

18樓:匿名使用者

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

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

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

19樓:匿名使用者

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

c語言程式ais與,c語言程式 a i s與a i s有區別嗎?

a i s 這個a i 必須是地址才對所以表達是錯誤的,應該 a i s 或者 定義一個指標 p a i 那麼 a i s 和p s是等價的,沒有區別 你這個a是一個結構體組成的陣列或者結構體指標組成的陣列吧 如果是前者,就是用a i s,如果是後者,就用a i s 因為結構體和結構體指標獲取屬性就...

我從書上學一點C語言基礎編成用Lcc win32編成簡

include viod main 我是c語言初學者,用lcc win32編完hlloworld程式 把原始檔內容發出來看看。你換一個編譯器吧 推薦c free.c語言,用lcc win32輸出 helloworld debug問題 10 所謂 斷點 是指在執行到這個語句的時候停止下來。函式原型不是...

我電瓶車和汽車相撞。認定書上說對方全責。現在車修好了。對方不給錢。怎麼辦

事故發生bai後報警了,交警也du下達了事故責任認定書,裁定zhi 機動車承擔全部dao責任,現在你的電瓶專車修好了,但機屬動車一方不賠償修車費,遇到這樣的,只能是拿著事故責任認定書到法院起訴機動車一方,要求法院判決機動車方賠償你的損失並承擔本次訴訟的費用,法院會判決機動車方賠償你的損失的。抓緊起訴...