→ nh60211as: int* p 已經指到 a[] 的外面了 07/22 22:28
所以應該要馬undifine要馬0是嗎?
※ 編輯: ericerix (118.160.241.74 臺灣), 07/22/2021 22:31:31
→ sarafciel: a不是指標 a是int[5], &a是pointer to int[5] 07/22 23:32
→ sarafciel: sizeof(int[5])是20byte 所以這邊&a+1直接多20byte超界 07/22 23:36
→ loveme00835: 你知道為什麼拿掉轉型 (int*) 會吐 warning 嗎? 還是 07/23 00:37
→ loveme00835: 你不知道為什麼要這樣寫? 07/23 00:38
我不太清楚為什麼需要加上轉型
我其實是不知道為什麼編譯器出來會是0,而網路上大家會說是5,
我認為應該是超界,但我不知道會是什麼答案(超界該怎麼表示?)
※ 編輯: ericerix (118.160.241.74 臺灣), 07/23/2021 00:59:11
※ 編輯: ericerix (118.160.241.74 臺灣), 07/23/2021 01:13:04
我稍微查了一下,
大概是說a是array第一個element的位址,
而&a是這個array的位址,
所以a, &a是一樣的,
pointer如果去+1會是加上這個結構的大小,
所以a+1應會加上4個bytes,也就是到達&a[1],
而&a+1,因為&a代表整個array的頭的位址,+1下去會加上整個結構的大小,
所以在這個case會加上20個bytes,也就是會到達類似&a[5]的位址,
會超出a的界線。
但這題是在問,這個位址的內容物大小是多少,
但是我根本不知道超界之後的位址內容長怎樣,要如何作答?
照著一樓大大的網址來看,內容應該是全為ff..f?不太清楚
另外我也不知道為何int *p = (int *)(&a+1);這裡需要轉型
還請高手們替我解答
謝謝大家!
※ 編輯: ericerix (118.160.241.74 臺灣), 07/23/2021 01:21:01
→ lgen7604: 我猜原始程式是不是要把 (*p-1) 改成 *(p-1)? 07/23 01:19
這樣看起來合理多了XDD 看來是我抄題抄錯了(?
不然超界的位址是多少誰知道呢
※ 編輯: ericerix (118.160.241.74 臺灣), 07/23/2021 01:22:53