[問題] 陣列用 & 取址做運算之後位址跑出範圍

看板C_and_CPP (C/C++)作者 (無題)時間12年前 (2013/06/28 03:38), 編輯推噓0(1110)
留言12則, 9人參與, 最新討論串1/1
問題(Question): int a[5] = {1,2,3,4,5}; int *p = (int *)(&a+1); *p-1 = ? 預期的正確結果(Expected Output): 小弟怎麼想都是 1 錯誤結果(Wrong Output): 但是實際用 dev c去跑發現竟然是 一個unknown 的數 覺得唯一的可能就是 p = (int *)(&a+1) 時 p拿到的是相當於 a[5]的address 去print的p的address 果然如此 但我不能理解的就是 p = (int *)(&a) 明明就是 &a[0] 怎麼可能 &a+1 address就跑到整個陣列之外了 請問是什麼道理? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.185.139.29

06/28 03:48, , 1F
pointer 的算術會看 sizeof, &a 的 a size 是 4*5
06/28 03:48, 1F

06/28 03:49, , 2F
你想表達的寫法是 a+1 不是 &a+1
06/28 03:49, 2F

06/28 03:52, , 3F
謝謝!!
06/28 03:52, 3F

06/28 11:07, , 4F
array那個a本來就是位置吧~
06/28 11:07, 4F

06/28 11:09, , 5F
推文怎麼變這樣...
06/28 11:09, 5F

06/28 13:14, , 6F
p=a+1; *(p-1); 是這樣嗎?
06/28 13:14, 6F

06/28 15:46, , 7F
a本身就是位置了 &a會出來未知很正常吧?
06/28 15:46, 7F

06/28 16:41, , 8F
@abcsimps : 在這裡,其實 &a 和 a 得到的都是 address
06/28 16:41, 8F

06/28 16:58, , 9F
只是&a是a本身的位置,a是別人的位置
06/28 16:58, 9F

06/28 19:33, , 10F
a 是 array,&a 會得到指向 a 的頭的位址,以整個 array
06/28 19:33, 10F

06/28 19:34, , 11F
為元素,因此對此位址 +1 會往後跳一個 array 的距離
06/28 19:34, 11F

06/29 01:45, , 12F
爛標題
06/29 01:45, 12F
文章代碼(AID): #1Hp9J4qh (C_and_CPP)
文章代碼(AID): #1Hp9J4qh (C_and_CPP)