看板 C_and_CPP 關於我們 聯絡資訊
回覆在內文中如下。 ※ 引述《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