1. 什么是结构体?
结构体是一种自定义的数据类型,可以用来存储不同类型的变量。它允许我们将不同类型的数据组合在一起,以便于管理和操作。结构体可以包含多个成员变量,每个成员变量可以是任意数据类型。
2. 结构体的定义
我们可以使用struct
关键字定义结构体。结构体定义包括结构体名称和结构体成员变量。结构体定义通常放在函数外部,以便在程序中的任何位置都能使用它。
示例代码:
// 结构体定义
struct Person
{
char name[20];
int age;
float height;
};
3. 结构体的声明和初始化
定义结构体后,我们可以通过声明结构体变量来实例化它。声明结构体变量时,需要使用struct
关键字及结构体名称。
示例代码:
struct Person person1; // 声明结构体变量
person1.age = 20; // 初始化结构体成员变量
//另一种初始化方式↓
struct Person person1 = {"John", 18, 1.75};
4. 结构体成员的访问
我们可以使用.
操作符来访问结构体变量的成员。通过结构体变量和成员变量名的组合,我们可以读取或修改结构体的成员数据。
示例代码:
printf("Name: %s\n", person1.name); // 读取结构体成员
person1.height = 1.75; // 修改结构体成员
5. 结构体作为函数参数传递
我们可以将结构体作为参数传递给函数,在函数内部操作结构体成员变量,以实现对结构体的修改和处理。
示例代码:
void printPersonInfo(struct Person p)
{
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);
printf("Height: %.2f\n", p.height);
}
// 调用函数,传递结构体作为参数
printPersonInfo(person1);
6. 结构体数组
我们可以创建结构体数组,即在数组中存储多个结构体变量。通过循环遍历结构体数组,我们可以对每个结构体元素进行访问和处理。
示例代码:
struct Person persons[3]; // 声明结构体数组
// 循环遍历结构体数组
for (int i = 0; i < 3; i++)
{
printf("Person %d:\n", i+1);
scanf("%s", &persons[i].name);
scanf("%d", &persons[i].age);
scanf("%f", &persons[i].height);
}
7. 结构体指针:
结构体指针是指向结构体变量的指针,它可以用于访问结构体成员变量,并且可以通过指针修改结构体的值。结构体指针与一般指针使用相同的操作符*
和->
。
示例代码:
struct Person
{
char name[20];
int age;
float height;
};
struct Person person1;
struct Person *p; // 声明结构体指针
p = &person1; // 将结构体变量的地址赋给结构体指针
(*p).age = 20; // 使用指针访问和修改结构体成员
p->height = 1.75; // 使用指针访问和修改结构体成员
8. 嵌套结构体:
嵌套结构体是指在结构体中使用其他结构体作为其成员变量。这种方式可以组合不同的结构体,形成更复杂的数据结构。通过嵌套结构体,我们可以使用操作符.
和->
访问和操作内部结构体的成员变量。
示例代码:
struct Date {
int day;
int month;
int year;
};
struct Person {
char name[20];
struct Date birthdate; // 嵌套结构体作为成员变量
float height;
};
struct Person person1;
person1.birthdate.day = 25; // 访问嵌套结构体的成员
person1.birthdate.month = 3;
person1.birthdate.year = 1990;
printf("Birthdate: %d/%d/%d\n", person1.birthdate.day,
person1.birthdate.month, person1.birthdate.year);