永发信息网

C语言共同体问题

答案:2  悬赏:30  手机版
解决时间 2021-02-06 04:46
  • 提问者网友:动次大次蹦擦擦
  • 2021-02-05 19:23
字符0的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的执行结果是_______.
  #include
  main()
  { union
  { int i[4];
  long k;
  char c[6];
  }a,*s=&a ;
  s->i[0]=0x39;
  s->i[1]=0x38;
  printf(“%c\n”,s->c[0]);
  }
  A)5 B)3 C)6 D)9

竞赛题目,根本就不明白,求高人讲一下~~~谢了
最佳答案
  • 五星知识达人网友:怀裏藏嬌
  • 2021-02-05 19:37
所谓共同体就是所有变量公用内存空间,C[0]的内存值其实等于int[0]低位数值,这里
c[0]数值为0x39;题目的意思是c[0]的内存值,根本就不是c[0]的内存地址,所以跟共同体的空间一点关系都没有,别被楼上的迷惑了。
正解:c[0]数值为0x39,转化成十进制数就是57,但是c[0]为字符型,输出的不是整形,所以将57转化为字符型。再根据题目给出的“字符0的ASCII码的十进制数为48”可知57的字符就是‘9’,所以输出的字符为9,选D。
被楼上的撞上了,但解法跟内存无关,根据条件判断才行。
全部回答
  • 1楼网友:夜风逐马
  • 2021-02-05 19:57

其实,共同体的特点你应该知道吧:就是:所有的变量地址统一只有一个;长度为这个共同体中数据类型字节数最多的那个,这里是 int 类型,还有就是共同体的赋值问题,只有最后一次赋值是有效的,其他之前的赋值都会被最后一次赋值覆盖。所以,最后的值是c[2] 的值,应该是c{2}字符数组转换为ascii码的结果吧

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯