作者:
ericerix (Ponwar)
2021-07-22 22:08:32開發平台(Platform): (Ex: Win10, Linux, ...)
macOS
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
VS code
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
無
問題(Question):
求輸出
餵入的資料(Input):
無
預期的正確結果(Expected Output):
不知道
錯誤結果(Wrong Output):
沒有錯誤結果
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
https://pastebin.com/J3ysYEgV
int main(){
int a[5] = {1, 2, 3, 4, 5};
int *p = (int *)(&a + 1);
printf("%d, %d",*(a+1), (*p-1));
return 0;
}
補充說明(Supplement):
最近在讀C,看到這一題,
熊熊看看不出端倪,於是餵進去試跑看看,
輸出是2, 0,
但上網找,大家都說答案是2,5
第一個是2沒什麼爭議,有點不太懂為什麼第二個輸出是5,我比較認同我的編譯器XD
我對int *p = (int *)(&a+1);的理解是這樣:取得a這個地址再加1內的值,
而1為int,所以應該是加上4個bytes,
不過,a本身就是一個指標,&a不就是指標的指標嗎?但是沒有特別去宣告這個指標的指標
所以應該會不合法,因此輸出為0合情合理,
但網路上的答案都說是5,
解釋是:可把a[5]當成一個二維陣列,只存放一個element,
意即:int a可看成{{1,2,3,4,5}}
所以&a是這個 ^
{{1,2,3,4,5}}
而&a+1是這個 ^
因為沒有第二個element,所以答案是5
也點摸不著頭緒啊!!