看板 C_and_CPP 關於我們 聯絡資訊
http://descent-incoming.blogspot.tw/2012/10/c-pointer-vs-array-and-they-are.html short: http://goo.gl/SrWht 最近剛好也注意到這問題, 就寫了一篇, 我把整個 memory layout 畫出來, 希望這樣有清楚些。 有什麼錯誤也歡迎指證。 ※ 引述《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]??? : 那&a+1是否也等於a+1=&a[1]呢?? : 我在Dev C 上 執行 : 發現 &a[1]=a+1 =\= &a+1 : 為什麼呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.125.239.51
sunlights:謝謝!!! 10/05 09:32
LPH66:你的 &arr 其型態是 char (*)[10] 因此 +1 時會跳十格 10/05 09:52
LPH66:之所以是十格是因為 sizeof(char[10]) == 10 的關係 10/05 09:52
descent:LPH66: 感謝, 一語驚醒夢中人。 10/05 10:34
loveme00835:沒用過 ptr to array 很難理解差別,const ptr 的說法 10/05 10:39
loveme00835:遇到 & 就破功了,畢竟是strong type lang, 思考先從 10/05 10:41
loveme00835:型別著手,而不是數值 10/05 10:42
s3748679:lang 是 language 的縮寫!? (不太習慣這個的縮寫.. 10/05 21:54
legnaleurc:C 算 weak type 吧? 10/05 22:54
littleshan:C 是 weak typing 10/06 01:59
loveme00835:sorry term 用錯 10/06 02:19
※ 編輯: descent 來自: 59.125.239.51 (10/12 08:56)