📜  C |结构与联合|问题8

📅  最后修改于: 2021-05-29 13:11:55             🧑  作者: Mango

union test
{
    int x;
    char arr[4];
    int y;
};
  
int main()
{
    union test t;
    t.x = 0;
    t.arr[1] = 'G';
    printf("%s", t.arr);
    return 0;
}

预测以上程序的输出。假设整数的大小为4个字节,字符的大小为1个字节。还假定不需要对齐。
(A)没有打印任何内容
(B) G
(C)垃圾字符后跟“ G”
(D)垃圾字符,后跟“ G”,然后是更多垃圾字符
(E)编译器错误答案: (A)
说明:由于x和arr [4]共享相同的内存,因此当我们将x设置为0时,arr的所有字符都将设置为0。O是ASCII值“ \ 0”。当我们执行“ t.arr [1] =’G’”时,arr []变为“ \ 0G \ 0 \ 0”。当我们使用“%s”打印字符串,printf函数从第一个字符开始,一直打印直到找到\ 0。由于第一个字符本身为\ 0,因此不会打印任何内容。
这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。