[問題] 陣列名稱與指標

看板C_and_CPP (C/C++)作者時間12年前 (2014/05/22 18:25), 12年前編輯推噓6(607)
留言13則, 8人參與, 最新討論串1/1
各位先進大家好: int a[5] = {1,2,3,4,5}; int *ptr = (int *)(&a+1); value of *ptr-1 = ?? 這邊我把它印出來發現是 32766 但是不太懂為什麼 &a 跟 a 都是陣列的起始記憶體位置 所以我猜*ptr-1 會等於 2-1=1才對啊?! 有請高手分析 謝謝! ※ 編輯: kumusou (39.13.28.164), 05/22/2014 18:42:35 ※ 編輯: kumusou (39.13.28.164), 05/22/2014 18:43:47

05/22 18:51, , 1F
*(ptr-1)?
05/22 18:51, 1F

05/22 18:53, , 2F
哦看錯 還是要 ptr = &a+4?
05/22 18:53, 2F

05/22 18:55, , 3F
我想問為啥印出來的執會是32766
05/22 18:55, 3F

05/22 18:59, , 4F
應該是因為a是一維指標 &a變成是二維指標了
05/22 18:59, 4F

05/22 19:00, , 5F
a+1會指到a[1]在一維指標上偏移 &a+1指的不知道是哪裡
05/22 19:00, 5F

05/22 19:07, , 6F
&a的type是int[5] &a+1會加一個int[5]的size
05/22 19:07, 6F

05/22 19:09, , 7F
所以這裡 ptr是指向a+5的那個位址
05/22 19:09, 7F

05/22 19:11, , 8F
更正一下 &a的type應該是int(*)[5]
05/22 19:11, 8F

05/22 19:30, , 9F
不過這樣求這值很奇怪,我猜應該是要求*(ptr-1)的值
05/22 19:30, 9F

05/22 19:36, , 10F
未定義行為
05/22 19:36, 10F

05/22 21:50, , 11F
出界啦 同樣覺得想問的是*(ptr-1)
05/22 21:50, 11F

05/23 08:16, , 12F
出界+1
05/23 08:16, 12F

05/24 14:09, , 13F
跟我去某家做 RF recorder 面試的題目一樣...XD
05/24 14:09, 13F
文章代碼(AID): #1JVT272x (C_and_CPP)
文章代碼(AID): #1JVT272x (C_and_CPP)