[問題] 一個指標的問題

看板C_and_CPP作者 (猴仔)時間14年前 (2011/11/15 11:50), 編輯推噓2(2014)
留言16則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): Line1--> int a[5] = {1,2,3,4,5}; Line2--> int *ptr = (int*) (&a+1); cout << *(ptr-1) << endl; 這邊會印出5 但是 有點不太懂為什麼 若本來a指向陣列的第一個位址 Line2 若以int來移動 應該會指向 a[4] 1,2,3,4,5 ^ ^ a ptr 所以 *(ptr -1) 印出來 應該是 4??? 懇請高人指點 thx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.167.11.180

11/15 12:00, , 1F
不是, (int*)(&a+1), 一次移動是 sizeof(a)=20 bytes.
11/15 12:00, 1F

11/15 12:43, , 2F
我一直不太懂為何要加(int*)? 有人可以幫忙解釋一下嘛?
11/15 12:43, 2F

11/15 13:00, , 3F
後面的(&a+1)會跳到5的後面,因為一次增加整個array
11/15 13:00, 3F

11/15 13:00, , 4F
的大小,然後用(int*)轉型為int*這樣才會符合
11/15 13:00, 4F

11/15 13:01, , 5F
把 (int*) 拿掉的錯誤訊息,其實就告訴一切了
11/15 13:01, 5F

11/15 13:01, , 6F
拿掉那個之後出現的錯誤就很明顯了
11/15 13:01, 6F

11/15 13:01, , 7F
(&a+1) 這個東西的型態其實是 int (*)[5]
11/15 13:01, 7F

11/15 13:01, , 8F
cannot convert 'int (*)[6]' to 'int*' in initiali
11/15 13:01, 8F

11/15 13:38, , 9F
謝謝最帥超哥和哆啦a夢
11/15 13:38, 9F

11/15 15:35, , 10F
多拉a夢是誰啊= =?
11/15 15:35, 10F

11/15 15:36, , 11F
樓上是哆啦a夢.
11/15 15:36, 11F

11/15 17:15, , 12F
我什麼時候變成多拉a夢...
11/15 17:15, 12F

11/15 17:16, , 13F
說到多拉a夢突然想到....http://ppt.cc/H1PE
11/15 17:16, 13F

11/15 17:24, , 14F
日文的哆的羅馬音開頭是D
11/15 17:24, 14F

11/15 19:01, , 15F
原來=.=
11/15 19:01, 15F

11/16 22:45, , 16F
很明顯就是三個單字組成.........
11/16 22:45, 16F
文章代碼(AID): #1EmU6Hc_ (C_and_CPP)