018. 定义和初始化结构体

在C语言中,结构体(struct)是一种用户自定义的数据类型,用于将多个不同类型的数据组合在一起。定义和初始化结构体是C语言编程中的一个重要技能。以下将详细介绍如何定义和初始化结构体。

1. 定义结构体

结构体的定义使用struct关键字,后面跟着结构体的名称和花括号{},花括号内定义了结构体的成员变量。

示例1:定义一个简单的结构体

#include <stdio.h>

// 定义一个结构体
struct Person {
    char name[50]; // 姓名
    int age;       // 年龄
    float height;  // 身高
};

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

    // 初始化结构体成员
    strcpy(person1.name, "Alice");
    person1.age = 25;
    person1.height = 165.5;

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

    return 0;
}

输出结果

Name: Alice
Age: 25
Height: 165.50 cm

2. 初始化结构体

结构体可以在声明时直接初始化,也可以在声明后单独赋值。

示例2:在声明时初始化结构体

#include <stdio.h>

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

int main() {
    // 在声明时初始化结构体
    struct Person person1 = {"Bob", 30, 175.0};

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

    return 0;
}

输出结果

Name: Bob
Age: 30
Height: 175.00 cm

示例3:使用指定初始化器初始化结构体(C99及以上标准支持)

#include <stdio.h>

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

int main() {
    // 使用指定初始化器初始化结构体
    struct Person person1 = {
        .name = "Charlie",
        .age = 22,
        .height = 180.5
    };

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

    return 0;
}

输出结果

Name: Charlie
Age: 22
Height: 180.50 cm

3. 结构体数组

可以声明一个结构体数组,用于存储多个结构体变量。

示例4:定义和初始化结构体数组

#include <stdio.h>

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

int main() {
    // 定义并初始化一个结构体数组
    struct Person people[3] = {
        {"Alice", 25, 165.5},
        {"Bob", 30, 175.0},
        {"Charlie", 22, 180.5}
    };

    // 遍历结构体数组并输出每个成员
    for (int i = 0; i < 3; i++) {
        printf("Person %d:\n", i + 1);
        printf("  Name: %s\n", people[i].name);
        printf("  Age: %d\n", people[i].age);
        printf("  Height: %.2f cm\n", people[i].height);
    }

    return 0;
}

输出结果

Person 1:
  Name: Alice
  Age: 25
  Height: 165.50 cm
Person 2:
  Name: Bob
  Age: 30
  Height: 175.00 cm
Person 3:
  Name: Charlie
  Age: 22
  Height: 180.50 cm

4. 结构体指针

可以使用指针来访问和修改结构体的成员。通过指针访问结构体成员时,使用->运算符。

示例5:使用结构体指针

#include <stdio.h>

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

int main() {
    // 声明并初始化一个结构体变量
    struct Person person1 = {"David", 28, 170.0};
    struct Person *ptr = &person1; // 声明一个结构体指针并初始化

    // 通过指针访问和修改结构体成员
    printf("Name: %s\n", ptr->name);
    printf("Age: %d\n", ptr->age);
    printf("Height: %.2f cm\n", ptr->height);

    ptr->age = 29; // 修改结构体成员
    printf("Updated Age: %d\n", ptr->age);

    return 0;
}

输出结果

Name: David
Age: 28
Height: 170.00 cm
Updated Age: 29

5. 嵌套结构体

结构体可以嵌套在另一个结构体中,形成更复杂的数据结构。

示例6:定义和初始化嵌套结构体

#include <stdio.h>

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

struct Person {
    char name[50];
    int age;
    float height;
    struct Date birthDate; // 嵌套结构体
};

int main() {
    // 定义并初始化一个嵌套结构体
    struct Person person1 = {
        "Eve", 24, 168.0, {15, 5, 1999} // 初始化嵌套结构体
    };

    // 输出嵌套结构体的成员
    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f cm\n", person1.height);
    printf("Birth Date: %d/%d/%d\n", person1.birthDate.day, person1.birthDate.month, person1.birthDate.year);

    return 0;
}

输出结果

Name: Eve
Age: 24
Height: 168.00 cm
Birth Date: 15/5/1999

通过上述示例,你可以看到如何在C语言中定义和初始化结构体:

  1. 定义结构体:使用struct关键字定义结构体,并在花括号内声明成员变量。
  2. 初始化结构体:可以在声明时直接初始化,也可以在声明后单独赋值。
  3. 结构体数组:可以声明一个结构体数组,用于存储多个结构体变量。
  4. 结构体指针:可以使用指针来访问和修改结构体的成员,使用->运算符。
  5. 嵌套结构体:结构体可以嵌套在另一个结构体中,形成更复杂的数据结构。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)