结构体和联合体

person c猿人    watch_later 2024-09-21 17:10:21
visibility 219    class 结构体,联合体,struct,union    bookmark 专栏

在 C 语言中,结构体和联合体是用于定义自定义数据类型的两种重要方式。它们允许将多个不同类型的数据组合在一起,形成一个单独的实体。

1. 结构体 (struct)

结构体是一种用户定义的数据类型,可以将多个不同类型的变量组合在一起。每个变量称为“成员”。

结构体的定义与使用

// 定义结构体
struct Person {
    char name[50];
    int age;
    float height;
};

// 使用结构体
int main() {
    struct Person person1; // 声明结构体变量

    // 访问并赋值
    strcpy(person1.name, "Alice");
    person1.age = 30;
    person1.height = 5.6;

    // 输出
    printf("Name: %s, Age: %d, Height: %.2f\n", person1.name, person1.age, person1.height);

    return 0;
}

嵌套结构体

嵌套结构体是指一个结构体的成员本身也是一个结构体,这可以帮助我们定义更复杂的数据类型。

// 定义嵌套结构体
struct Date {
    int day;
    int month;
    int year;
};

struct Person {
    char name[50];
    int age;
    struct Date birthday;  // 嵌套的 Date 结构体
};

int main() {
    struct Person person1;

    strcpy(person1.name, "Bob");
    person1.age = 25;
    person1.birthday.day = 15;
    person1.birthday.month = 8;
    person1.birthday.year = 1995;

    printf("Name: %s, Age: %d, Birthday: %d/%d/%d\n", 
           person1.name, person1.age, 
           person1.birthday.day, person1.birthday.month, person1.birthday.year);

    return 0;
}

2. 联合体 (union)

联合体是一种特殊的数据类型,类似于结构体,但它的所有成员共享同一个内存空间。这意味着在某一时刻只能存储其中一个成员的数据。

联合体的定义与使用

// 定义联合体
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;

    data.i = 10;
    printf("data.i : %d\n", data.i);

    data.f = 220.5;
    printf("data.f : %.2f\n", data.f);

    strcpy(data.str, "Hello");
    printf("data.str : %s\n", data.str);

    // 注意:由于联合体成员共享同一块内存,前一个成员的值会被后一个成员覆盖。
    // 所以,在最后一次输出时,只有最后赋值的成员数据是有效的。

    return 0;
}

联合体与结构体的区别

  • 结构体:每个成员都有自己的内存空间,所有成员可以同时保存数据。
  • 联合体:所有成员共享同一个内存空间,在同一时刻只能存储一个成员的值。

总结:

  • 结构体允许我们定义复杂的数据类型,每个成员都有自己的内存空间。
  • 嵌套结构体可以用于定义更复杂的结构体类型。
  • 联合体则是一种更加节省内存的方式,它在同一时刻只能存储一个成员的数据。
评论区
评论列表
menu