结构体与共用体的区别

C语言中的结构体(struct)和共用体(union)是用来存储不同类型的数据的复合数据类型,但它们在内存中的存储方式是有很大区别的

一、结构体

  • 定义:结构体是一种用户自定义的数据类型,允许在一个单独的实体中存储不同类型的数据。结构体的成员可以是不同的数据类型。
  • 内存分配:结构体的各个成员在内存中是按照其声明的顺序依次存储的,每个成员都有自己的内存空间。
  • 大小计算:结构体的大小等于所有成员大小的总和,但可能会因为内存对齐的原因而有所增加。
  • 访问成员:可以通过结构体变量的成员运算符.来访问结构体的成员。
#include <iostream>

struct Person {
    char name[50];
    int age;
    float salary;
};

int main() {
    std::cout << sizeof(struct Person) << std::endl;

    struct Person person;
    person.age = 18;
    person.salary = 12400.0;

    std::cout << person.age << std::endl;
    std::cout << person.salary << std::endl;

    return 0;
}

输出结果: 

二、共用体

  • 定义:共用体也是一种用户自定义的数据类型,但它允许在同一内存空间存储不同类型的数据,但一次只能存储其中一个成员。
  • 内存分配:共用体的所有成员共享同一块内存空间,因此共用体的大小等于最大成员的大小。
  • 大小计算:共用体的大小等于最大成员的大小。
  • 访问成员:通过共用体变量的成员运算符.来访问共用体的成员,只能访问当前存储的成员
#include <iostream>

union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data value;
    value.i = 10;
    value.f = 40.0;
    
    std::cout << sizeof(union Data) << std::endl;
    std::cout << value.i << std::endl;
    std::cout << value.f << std::endl;

    return 0;
}

打印结果: 

由打印结果可以看出,共用体共用一块内存,当初始化value.f = 40.0时,它会把value.i = 10覆盖掉然后给它赋一个随机值。

posted @ 2023-11-28 18:24  TechNomad  阅读(568)  评论(0编辑  收藏  举报