String作为Union的成员

问题描述 投票:1回答:1

我正在遍历这段代码以找到答案。据我所知,每个成员的内存地址是相同的。在下面的代码中,如果有一个字符而不是字符串,那将很容易。但是现在我很困惑.... 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;
}
structure unions
1个回答
0
投票

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将其解释为以最低有效字节(LSB)顺序的4字节整数。 LSB格式的4字节整数以A B C D格式表示在内存中,其中值为A + 256*B + 65536*C + 16777216*D。因此,03 01 00 003 + 256*1,等于259

© www.soinside.com 2019 - 2024. All rights reserved.