字符串作为Union的成员

我正在遍历这段代码以查找答案。据我所知,每个成员的内存地址都是相同的。在下面的代码中,如果有一个字符而不是字符串,那将很容易。但是现在我很困惑。...i=259的价值如何?

#include<stdio.h>
int main()
{
   union cq1
   {
        int i;
        char ch[2];
   };
   union cq1 u1;
   u1.ch[0]=3;
   u1.ch[1]=1;
   printf("%d %d %d",u1.ch[0],u1.ch[1],u1.i);
   return 0;
}
lixb07072014 回答:字符串作为Union的成员

诸如char ch[2]之类的字符数组是2个char的数组,每个1字节长。这意味着在内存中,它是char,然后是第二个char

此联合包含2种类型,一个32位(在我的机器上)整数和2个字符的数组。 由于最大类型为32位或4个字节,因此联合的总大小为4个字节。您可以使用printf("%d\r\n",sizeof(u1));

进行验证

ui1.ch[0] = 3将第一个字节设置为3,而u1.ch[1] = 1将第二个字节设置为1。在调试器中查看时,看到0x60fefc: 03 01 00 00。也就是说,在与u1相对应的存储位置处有字节3、1、0和0。 u1.i将此解释为4个字节的最低有效字节(LSB)顺序的整数。 LSB格式的4字节整数以A B C D格式表示在内存中,其中的值为A + 256*B + 65536*C + 16777216*D(对于最大值为2147483483647的正值)。因此,03 01 00 003 + 256*1,等于259。

本文链接:https://www.f2er.com/2561059.html

大家都在问