Re: [問題] 指標和陣列的問題

看板C_and_CPP作者 (返無)時間13年前 (2012/10/05 08:21), 編輯推噓3(308)
留言11則, 7人參與, 最新討論串4/4 (看更多)
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

10/05 09:32, , 1F
謝謝!!!
10/05 09:32, 1F

10/05 09:52, , 2F
你的 &arr 其型態是 char (*)[10] 因此 +1 時會跳十格
10/05 09:52, 2F

10/05 09:52, , 3F
之所以是十格是因為 sizeof(char[10]) == 10 的關係
10/05 09:52, 3F

10/05 10:34, , 4F
LPH66: 感謝, 一語驚醒夢中人。
10/05 10:34, 4F

10/05 10:39, , 5F
沒用過 ptr to array 很難理解差別,const ptr 的說法
10/05 10:39, 5F

10/05 10:41, , 6F
遇到 & 就破功了,畢竟是strong type lang, 思考先從
10/05 10:41, 6F

10/05 10:42, , 7F
型別著手,而不是數值
10/05 10:42, 7F

10/05 21:54, , 8F
lang 是 language 的縮寫!? (不太習慣這個的縮寫..
10/05 21:54, 8F

10/05 22:54, , 9F
C 算 weak type 吧?
10/05 22:54, 9F

10/06 01:59, , 10F
C 是 weak typing
10/06 01:59, 10F

10/06 02:19, , 11F
sorry term 用錯
10/06 02:19, 11F
※ 編輯: descent 來自: 59.125.239.51 (10/12 08:56)
文章代碼(AID): #1GRYWZcN (C_and_CPP)
文章代碼(AID): #1GRYWZcN (C_and_CPP)