如下程序,运行结果是多少?为什么?

main() { union bt { int k; char c[2]; }a; a.k=-7; printf("%o,%o\n",a.c[0],a.c[1]); }

慕神8447489
浏览 245回答 2
2回答

哔哔one

Union是共用空间的。和Struct不同。共有4个字节,第一个字节 k [0..7]位 和 c[0] 共用第二个字节 k [8..15]位 和 c[1] 共用。第三个字节 k [16..23]位。第四个字节 k [24..31]位。-7内部机器补码为 FF FF FF F9 先低后高存放。VC编译器会在printf的时候自动转为int型的变量。a.k=-7;printf("%o,%o\n",a.c[0],a.c[1]);printf("%02X,%02X\n",(unsigned char)a.c[0], (unsigned char)a.c[1]);的执行结果是:37777777771,37777777777F9,FFF9 FF 是内存实际值的真实反映。可以自己去看内存。

哈士奇WWW

#include<iostream.h>#include<stdio.h>void main(){union bt{int k;char c[2];}a;a.k=-7;printf("%o,%o\n",a.c[0],a.c[1]); //a.c[]没有初始化,输出的就是一个随机值。 %o是以8无符号8进制数的形式输出}
打开App,查看更多内容
随时随地看视频慕课网APP