结构体(Struct)

结构体是一种用户定义的数据类型,允许将不同类型的变量组合在一起作为一个单一的实体进行处理。结构体常用于组织和管理不同类型的数据,使代码更具可读性和可维护性。结构体有如下三个关键特性:

  • 成员独立:结构体中的每个成员都有自己的内存空间,不同成员之间互不干扰;

  • 顺序存储:结构体中的成员按照声明的顺序依次存储在内存中,但可能存在字节填充(padding)以满足对齐要求;

  • 类型混合:结构体中可以包含不同类型的数据成员,例如整型、浮点型和字符数组等。

以下是一个简短的代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <iostream>

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

int main() {
    Person person = {"Alice", 30, 1.75};

    std::cout << "Name: " << person.name << std::endl;
    std::cout << "Age: " << person.age << std::endl;
    std::cout << "Height: " << person.height << std::endl;

    return 0;
}

联合体(Union)

同样的,联合体也是一种用户自定义的数据类型,允许将多个不同类型的变量存储在同一个内存位置。它常用于节省内存,尤其在需要处理多种数据类型但某一时刻只会使用其中一种的情况下。联合体有如下三个关键特性:

  • 共享内存:联合体中的所有成员共享同一块内存,某一时刻只能有一个成员是有效的;

  • 节省空间:联合体的大小等于其最大成员的大小;

  • 类型混合:同样可以包含不同类型的数据成员,但某一时刻只能使用某一个成员变量。

以下是一个简短的示例代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

union Data {
    int intValue;
    float flaotValue;
    char charValue;
};

int main() {
    Data data;

    data.intValue = 10;
    std::cout << "Integer: " << data.intValue << std::endl;

    data.floatValue = 3.14;
    std::cout << "Float: " << data.floatValue << std::endl;

    data.charValue = 'A';
    std::cout << "Char: " << data.charValue << std::endl;

    return 0;
}

结构体与联合体的对比分析

结构体 联合体
内存管理 每个成员都有独立的内存空间 所有成员共享同一内存空间
大小 所有成员大小之和(加上可能的填充字节) 最大成员的大小
数据有效性 结构体变量有效期中,所有成员始终有效 某一时刻,只能有一个成员有效
用途 数据记录、函数返回多个值 嵌入式系统节省内存、硬件寄存器访问