作者dirkc (Dirk)
看板C_and_CPP
標題Re: [問題] 指標和陣列的問題
時間Thu Oct 4 22:59:18 2012
回覆在內文中如下。
※ 引述《sunlights (sunlights)》之銘言:
: 開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
: Dev-C++
: 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
: 無
: 因為有個問題一直想不通指標就一直學不下去..
: 現在想問一下
: int a[]={12,5,3};
: 有人說a可當成指標..
: 所以
: *(a+0)=12
: *(a+1)=5
: *(a+2)=3
: 而 &a[0]= a+0 = 存放12的位址暫設成xxx
: &a[1]= a+1 = 存放5的位址暫設成xxx+1
: &a[2]= a+2 = 存放3的位址暫設成xxx+2
: 可是我一直想不通的問題是 a 到底是不是指標
: 如果是指標的話..它應該是存著指標的變數..
: 但通常存指標的變數也有它的位址..
: 而a的位址卻剛好和存放陣列的第一個位址相同
: 那是否也代表&a=a+0=&a[0]???
這個問題的答案剛好是Yes,但是a+0以及&a[0]的意義雷同,卻與&a的意義不同。
&a 的意義是對一個存放三個整數(int a[]={12,5,3})的陣列做取址的動作,
請留意這裡我說三個整數的陣列,因為當int是4個位元組的時候sizeof(a)會等於12,
所以當你作 &a+1 的動作的時候,等於 &a + sizeof(a)*1 也就是 xxx + 12 (10進位)
&a[0]則是對陣列的第一個整數空間做取址的動作。
解讀a+0可以先來單純看a,也就是陣列的名稱,可以將陣列名稱當作是const pointer (to an integer array, of course),
其值等於存放陣列第一個空間的位址,例如:
int *const cp = a;
*cp等於a[0],a+0等同於cp+0,a+1等同於cp+1,
但是陣列名稱 a 和 cp 又不完全一樣,因為陣列名稱 a 是 const pointer to an integer array,cp 是 const pointer to an integer
雖然不同,當陣列名稱 a 單獨出現的時候,把它當作上面的 cp 來想會比較簡單。
所以可以說&a[0]和a+0的意義是雷同的,但與&a意義不同,雖然數值一樣。
: 那&a+1是否也等於a+1=&a[1]呢??
: 我在Dev C 上 執行
: 發現 &a[1]=a+1 =\= &a+1
: 為什麼呢??
&a+1 等於 &a + sizeof(a)*1,原因如上面所述。
&a+2 等於 &a + sizeof(a)*2,同理。
胡亂回答了一番,希望有一些幫助 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.103.242
→ loveme00835:無言了... 10/05 00:12
推 sunlights:有很大的幫助,謝謝了!! 10/05 09:31