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语言中定义和初始化结构体:
- 定义结构体:使用
struct
关键字定义结构体,并在花括号内声明成员变量。 - 初始化结构体:可以在声明时直接初始化,也可以在声明后单独赋值。
- 结构体数组:可以声明一个结构体数组,用于存储多个结构体变量。
- 结构体指针:可以使用指针来访问和修改结构体的成员,使用
->
运算符。 - 嵌套结构体:结构体可以嵌套在另一个结构体中,形成更复杂的数据结构。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)