看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
tropical72:不是, (int*)(&a+1), 一次移動是 sizeof(a)=20 bytes. 11/15 12:00
angleevil:我一直不太懂為何要加(int*)? 有人可以幫忙解釋一下嘛? 11/15 12:43
diabloevagto:後面的(&a+1)會跳到5的後面,因為一次增加整個array 11/15 13:00
diabloevagto:的大小,然後用(int*)轉型為int*這樣才會符合 11/15 13:00
james732:把 (int*) 拿掉的錯誤訊息,其實就告訴一切了 11/15 13:01
diabloevagto:拿掉那個之後出現的錯誤就很明顯了 11/15 13:01
james732:(&a+1) 這個東西的型態其實是 int (*)[5] 11/15 13:01
diabloevagto:cannot convert 'int (*)[6]' to 'int*' in initiali 11/15 13:01
angleevil:謝謝最帥超哥和哆啦a夢 11/15 13:38
diabloevagto:多拉a夢是誰啊= =? 11/15 15:35
angleevil:樓上是哆啦a夢. 11/15 15:36
diabloevagto:我什麼時候變成多拉a夢... 11/15 17:15
diabloevagto:說到多拉a夢突然想到....http://ppt.cc/H1PE 11/15 17:16
angleevil:日文的哆的羅馬音開頭是D 11/15 17:24
diabloevagto:原來=.= 11/15 19:01
qpalwosk:很明顯就是三個單字組成......... 11/16 22:45