2015-12-26 49 views
-6

如果您要編譯並執行以下c代碼,會輸出什麼內容?編譯C

void main(){ 
    int huge*p=(int huge*)0XC0563331; 
    int huge*q=(int huge*)0xC2551341; 
    *p=200; 
    printf("%d",*q); 
} 
+2

爲什麼不檢查? –

+1

也許未定義的行爲。 – MikeCAT

+0

然後發佈錯誤消息,並解決問題,而不是問這樣的......坦率地說,廢話。 「夥伴。」一個不可編譯的程序如何產生輸出!?無論如何,它的未定義的行爲。 – Downvoter

回答

1

假設你的意思是寫如下:

#include <stdio.h> 

int main(void){ 
    int *p=(int *)0XC0563331; 
    int *q=(int *)0xC2551341; 
    *p=200; 
    printf("%d",*q); 
    return 0; 
} 

那麼輸出應該是任何整數值存儲起始地址0xC2551341

我不確定int huge應該代表什麼;更寬的整數類型是long intlong long int(或者只是longlong long)。請注意,這些更寬的類型分別使用%ld%lld轉換說明符來輸出。

+1

'巨大'涉及到16位x86內存訪問目前的64Kb段以外的訪問地址..它看起來像來自一些古董編譯器的代碼,並且幾乎可以肯定地將現代編譯器和操作系統分割開來。 – Clifford