前言
结构体是C语言中一种重要的数据类型,它允许我们将不同类型的数据组合成一个整体,并以自定义的方式进行操作。通过结构体,我们可以更加灵活地管理和处理复杂的数据结构,从而提高程序的可读性和可维护性。本篇博客将从结构体的定义开始,逐步介绍其在C语言中的应用,包括结构体变量的定义和初始化、结构体成员的访问、结构体作为函数参数的传递等内容,帮助读者深入理解C语言中结构体的核心概念和用法。接下来我们来详细解释一下
概述
- 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性
-
- 这时候可通过结构体实现
- 结构体(struct)可以理解为用户自定义的特殊的复合的“数据类型”
结构体变量的定义和初始化
- 定义结构体变量的方式:
-
- 先声明结构体类型再定义变量名
- 在声明类型的同时定义变量
- 语法格式:
// 先声明结构体类型再定义变量名
struct 结构体名 {
成员列表
};
struct 结构体名 变量名;
// 在声明类型的同时定义变量
struct 结构体名 {
成员列表
}变量名;
- 示例代码:
// 结构体类型的定义
struct stu {
char name[50];
int age;
};
// 先定义类型,再定义变量(常用)
struct stu s1 = {"mike", 18};
// 定义类型同时定义变量
struct stu2 {
char name[50];
int age;
}s2 = {"yoyo", 19};
结构体成员的使用
- 如果是结构体变量,通过 . 操作成员
- 如果是结构体指针变量,通过 -> 操作成功
#include <stdio.h>
#include <string.h>
// 结构体类型的定义
struct stu {
char name[50];
int age;
};
int main() {
// 定义结构体变量,同时初始化
struct stu s = {"mike", 18};
// 打印成员变量
printf("%s, %d\n", s.name, (&s)->age);
// 修改成功变量的内容
strcpy(s.name, "yoyo");
s.age = 19;
// 打印成员变量
printf("%s, %d\n", s.name, (&s)->age);
return 0;
}
结构体做函数参数
结构体值传参
- 传值是指将参数的值拷贝一份传递给函数,函数内部对该参数的修改不会影响到原来的变量
示例代码:
#include <stdio.h>
#include <string.h>
// 结构体类型的定义
struct stu {
char name[50];
int age;
};
// 函数定义
void func(struct stu temp) {
strcpy(temp.name, "yoyo");
temp.age = 20;
printf("函数内部:%s, %d\n", temp.name, temp.age);
}
int main() {
// 定义结构体变量
struct stu s = {"mike", 18};
// 调用函数,值传递
func(s);
// 打印成员变量
printf("函数外部:%s, %d\n", s.name, (&s)->age);
return 0;
}
运行结果:
函数内部:yoyo, 20
函数外部:mike, 18
结构体地址传递
- 传址是指将参数的地址传递给函数,函数内部可以通过该地址来访问原变量,并对其进行修改。
示例代码:
#include <stdio.h>
#include <string.h>
// 结构体类型的定义
struct stu {
char name[50];
int age;
};
// 函数定义
void func(struct stu *p) {
strcpy(p->name, "yoyo");
p->age = 20;
printf("函数内部:%s, %d\n", p->name, p->age);
}
int main() {
// 定义结构体变量
struct stu s = {"mike", 18};
// 调用函数,地址传递
func(&s);
// 打印成员变量
printf("函数外部:%s, %d\n", s.name, (&s)->age);
return 0;
}
运行结果:
函数内部:yoyo, 20
函数外部:yoyo, 20
接下来我们来写一个小案例练习
题目:定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。
代码示例:
#include <stdio.h>
#include <string.h>
struct Person { // Person是结构体名
char name[20];
int age;
};
struct Person person[3] = { // person[3]是结构体数组
{"喜羊羊", 22}, // 结构元素
{"懒羊羊", 23},
{"沸羊羊", 25}
};
int main() {
// 定义一个结构体Person,包含人的姓名和年龄两个成员变量。编写程序,创建一个Person类型的结构体数组,包含3个人的信息,并输出每个人的姓名和年龄。
for(int i = 0; i < 3; i++){
printf("姓名:%s,年龄:%d\n", person[i].name, person[i].age);
}
return 0;
}
总结
通过本篇博客,我们了解了C语言中结构体的重要性以及如何运用它来组织和管理数据。结构体不仅是一种数据类型,更是程序设计中的重要工具,能够帮助我们处理各种复杂的数据结构,实现更加高效、清晰的代码。希望本文能够对读者在学习和使用C语言时有所帮助,也欢迎大家分享自己对结构体的理解和应用经验,共同探讨C语言编程的知识。