-6
如果您要编译并执行以下c代码,会输出什么内容?编译C
void main(){
int huge*p=(int huge*)0XC0563331;
int huge*q=(int huge*)0xC2551341;
*p=200;
printf("%d",*q);
}
如果您要编译并执行以下c代码,会输出什么内容?编译C
void main(){
int huge*p=(int huge*)0XC0563331;
int huge*q=(int huge*)0xC2551341;
*p=200;
printf("%d",*q);
}
假设你的意思是写如下:
#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 int
和long long int
(或者只是long
和long long
)。请注意,这些更宽的类型分别使用%ld
和%lld
转换说明符来输出。
'巨大'涉及到16位x86内存访问目前的64Kb段以外的访问地址..它看起来像来自一些古董编译器的代码,并且几乎可以肯定地将现代编译器和操作系统分割开来。 – Clifford
为什么不检查? –
也许未定义的行为。 – MikeCAT
然后发布错误消息,并解决问题,而不是问这样的......坦率地说,废话。 “伙伴。”一个不可编译的程序如何产生输出!?无论如何,它的未定义的行为。 – Downvoter