结构体与共用体的区别

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

一、结构体

  • 定义:结构体是一种用户自定义的数据类型,允许在一个单独的实体中存储不同类型的数据。结构体的成员可以是不同的数据类型。
  • 内存分配:结构体的各个成员在内存中是按照其声明的顺序依次存储的,每个成员都有自己的内存空间。
  • 大小计算:结构体的大小等于所有成员大小的总和,但可能会因为内存对齐的原因而有所增加。
  • 访问成员:可以通过结构体变量的成员运算符.来访问结构体的成员。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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;
}

输出结果: 

二、共用体

  • 定义:共用体也是一种用户自定义的数据类型,但它允许在同一内存空间存储不同类型的数据,但一次只能存储其中一个成员。
  • 内存分配:共用体的所有成员共享同一块内存空间,因此共用体的大小等于最大成员的大小。
  • 大小计算:共用体的大小等于最大成员的大小。
  • 访问成员:通过共用体变量的成员运算符.来访问共用体的成员,只能访问当前存储的成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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 @   TechNomad  阅读(1207)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示