C語言中,a和a等價嗎?我在書上看到是等價,但為什麼

2021-03-08 04:11:08 字數 2243 閱讀 9436

1樓:匿名使用者

因為陣列從實現上來看其實就是指標啊。

#include

int main(void) ; //十個數int *p_array_a;

p_array_a = array_a; //注意我這裡沒用取址符的起始地址

printf("p_array_a : %p \n",p_array_a); //p_array_a指向的地址

int i;

for(i = 0; i < 10; i++)printf("\n");

for(i = 0; i < 10; i++)return 0;

}你可以自己試試。

2樓:匿名使用者

是等價的

指標的意思是,指向一塊記憶體的首地址

有了首地址,就可以訪問這塊記憶體中的第一個元素

把指標加上一個數字,就會得到一個新的指標,就可以訪問這塊記憶體中的後面的元素

陣列的意思是,一塊記憶體

但c語言有沒法同時對一整塊記憶體中所有元素訪問,還是得一個一個元素單獨訪問

而要訪問單獨元素,還是要通過單獨的地址,那麼最自然的方式還是通過首地址加上陣列索引來訪問

所以指標和陣列,意義上一個是地址,一個是記憶體,但是用起來沒有什麼兩樣,而實際上它們就是同一個東西的兩種不同寫法,它們編譯成機器指令後就完全分不清原來是怎麼寫的了

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

3樓:金色潛鳥

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

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]

4樓:運命に抗

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

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的表示等價?謝謝啦

5樓:覺悟壯志

不等價吧

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

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

a代表a[0]的地址

a+1就是地址+1

是a[1]……

6樓:儲熠祖波

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

7樓:匿名使用者

a表示的陣列首地址,指標和陣列在一定程度上是一樣的。所以a[i]和*(a+i)指向的元素是一樣的。

a[i]表示給定了陣列首地址的儲存位置a 尋找陣列中的第i+1個元素(陣列第一個元素是a[0]),而*(a+i)就直接讓指標指向陣列第i+1個元素。

8樓:靜文風

因為a即代表a[0]是陣列的首地址,所以a[i]等價於a[0]+i,即a+i

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

9樓:匿名使用者

*(a+i)就是值了

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

c語言中unsigned和signed在宣告時有什麼作用

1 unsigned的作用就是將數字型別無符號化,例如 int 型的範圍 2 31 2 31 1,而unsigned int的範圍 0 2 32。看起來unsigned 是個不錯的型別,尤其是用在自增或者沒有負數的情況。但是在實際使用中會出現一些意外的情況。2 signed在預設情況下宣告的整型變數...

在C語言中,「原碼,反碼和補碼」有什麼不同啊

正數的原碼,反碼和補碼都一樣的,而負數就不一樣了 計算機為了讓所有的數都是進行同一個加法運算,就有了原碼,反碼和補碼的產生 負數的補碼等於它的絕對值的原碼取反後得到這個負數的反碼,而在反碼的基礎上加1就變成了這個負數的補碼了 下面我用8位的來舉例 最高位是符號位 45原碼 00101101 反碼 0...

在c語言中p,d和x的區別p是以16進位制的

p用來輸出指標 x用來輸入int 型別。二者都是16進位制值輸出 如果版是32位系統 那麼沒區別 如果是64位系統 那麼 p會輸出8位元組權資料。而 x只能輸出4位元組資料。也就是說 32位系統 p等效於 x 64位系統 p等效於 lx 在c語言中 p d和 x 的區別 p 是以16進位制的形式輸 ...