C语言中struct和union,结构体和联合体的区别

共同体union:

使几个不同类型的变量共占一段内存。

之间可以相互覆盖。

内存大小取最长变量的长度。

赋值时,由于共用一段内存,所以会对其他变量成员重写。


结构体struct:

不同数据整合成一个整体。

每个变量都有自己的内存空间。

内存大小为所有变量所占内存之和。


举个栗子

#include <stdio.h>

typedef union {//定义一个联合
    int i;
    struct {
        char first;
        char second;
    } half;
} number;

int main() {
    number number;
    number.i = 0X4241;//联合成员赋值
    printf("%c%c\n", number.half.first, number.half.second);
    number.half.first = 'a';  //联合中,结构成员赋值
    number.half.second = 'b';
    printf("%x\n", number.i);
    return 0;
}

输出结果为

AB

6261

分析

在这里i和half结构是共用内存

number.i=0X4241 给i赋值后,内存中以二进制存储 0100 0010 0100 0001

按顺序对应到结构中

half.first=0100 0010 转换成十进制就是66 (字母A的asc码)

half.second=0100 0001 转换成十进制就是65 (字母B的asc码)

所以输出是AB








猜你喜欢

转载自blog.csdn.net/super_sloppy/article/details/79722599