作者descent (返無)
看板C_and_CPP
標題Re: [問題] 指標和陣列的問題
時間Fri Oct 5 08:21:50 2012
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)