33 结构体之结构体的使用

在上一篇中,我们讨论了如何定义结构体,了解了结构体的基本语法和用法。在本篇中,我们将深入探讨结构体的使用,具体包括如何在程序中创建和使用结构体变量,以及如何通过结构体来组织和操作复杂数据。

1. 创建结构体变量

创建结构体变量时,可以选择在定义结构体后立即初始化它们,或者在后续的代码中使用 struct 关键字来声明变量。

1.1 直接初始化结构体变量

我们可以定义完结构体后,直接创建变量并进行初始化。例如,假设我们有一个表示学生的结构体 Student

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

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

int main() {
// 直接初始化结构体变量
struct Student student1 = {"Alice", 20, 3.8};

// 打印结构体内容
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("GPA: %.2f\n", student1.GPA);

return 0;
}

在上述代码中,我们首先定义了一个结构体类型 Student,然后通过具体的数据初始化了一个结构体变量 student1。可以看到,通过.运算符访问结构体成员是非常简单的。

1.2 后续声明和赋值

除了直接初始化,我们也可以在后面进行赋值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() {
struct Student student2; // 只声明,不初始化
// 赋值结构体成员
strcpy(student2.name, "Bob");
student2.age = 22;
student2.GPA = 3.5;

// 打印结构体内容
printf("Name: %s\n", student2.name);
printf("Age: %d\n", student2.age);
printf("GPA: %.2f\n", student2.GPA);

return 0;
}

在这个例子中,我们先声明了一个结构体变量 student2,然后分别对其结构体成员进行赋值。

2. 传递结构体到函数

结构体可以作为参数传递给函数,这使得我们可以更方便地管理复杂的数据。我们将来看一个例子,演示如何将结构体作为参数传递。

2.1 传值

结构体传递的默认方式是按值,这意味着在函数内对结构体的修改不会影响到原有变量。

1
2
3
4
5
6
7
8
9
10
11
12
void printStudent(struct Student s) {
printf("Name: %s\n", s.name);
printf("Age: %d\n", s.age);
printf("GPA: %.2f\n", s.GPA);
}

int main() {
struct Student student1 = {"Charlie", 21, 3.9};
printStudent(student1); // 传递结构体

return 0;
}

在此例中,函数 printStudent 接收一个 Student 类型的参数,并打印出它的成员。

2.2 传引用(指针)

如果需要在函数中修改传入的结构体内容,可以通过结构体的指针来实现。这样可以节省内存和提高效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void updateGPA(struct Student *s, float newGPA) {
s->GPA = newGPA; // 使用指针修改结构体成员
}

int main() {
struct Student student2 = {"David", 19, 3.2};
printf("Before Update - GPA: %.2f\n", student2.GPA);

updateGPA(&student2, 3.7); // 传入结构体的地址

printf("After Update - GPA: %.2f\n", student2.GPA);

return 0;
}

在这个例子中,我们通过结构体的指针 s 来更新 GPA 的值。注意使用 -> 运算符来访问指针指向的结构体的成员。

3. 嵌套结构体

我们还可以在结构体内部定义其他结构体,从而形成嵌套结构体。这样可以进一步增强数据组织的能力。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Address {
char city[50];
char state[50];
};

struct Student {
char name[50];
int age;
float GPA;
struct Address address; // 嵌套结构体
};

int main() {
struct Student student1 = {"Eva", 22, 3.8, {"New York", "NY"}};

printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("GPA: %.2f\n", student1.GPA);
printf("City: %s\n", student1.address.city);
printf("State: %s\n", student1.address.state);

return 0;
}

在这里,我们定义了一个 Address 结构体,并将其嵌套在 Student 结构体中。嵌套结构体的使用使得数据的组织更加清晰。

结论

这一篇中,我们探讨了结构体的创建和使用,包括初始化、函数传递、嵌套结构体等内容。这些知识为你的 C 语言编程打下了基础,让你可以灵活地使用结构体来处理和组织复杂的数据。接下来,我们将讨论如何将结构体与数组结合使用,进一步拓展结构体的应用场景。

33 结构体之结构体的使用

https://zglg.work/c-language-zero/33/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论