2015-12-26 46 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