C语言 结构体
- 结构体的概念
- 在C语言中,结构体(struct)是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个逻辑上相关的整体。它类似于一个容器,可以容纳多种不同类型的数据项。
- 结构体的定义
- 结构体的定义语法如下:
例如,定义一个表示学生信息的结构体:struct 结构体名 { 成员类型1 成员名1; 成员类型2 成员名2; //... 成员类型n 成员名n; };
struct Student { char name[20]; int age; float score; };
- 这里定义了一个名为
Student
的结构体,它包含三个成员:一个字符数组name
用于存储学生姓名,一个整数age
用于存储学生年龄,一个浮点数score
用于存储学生成绩。
- 结构体的定义语法如下:
- 结构体变量的声明与初始化
- 声明
- 可以在结构体定义之后声明结构体变量。例如:
struct Student stu1;
- 也可以在定义结构体的同时声明结构体变量:
struct Student { char name[20]; int age; float score; } stu2;
- 可以在结构体定义之后声明结构体变量。例如:
- 初始化
- 结构体变量可以在声明时进行初始化。例如:
struct Student stu3 = {"Tom", 18, 90.5};
- 还可以通过指定成员来初始化:
struct Student stu4 = {.age = 19,.score = 88.0,.name = "Jerry"};
- 结构体变量可以在声明时进行初始化。例如:
- 声明
- 结构体成员的访问
- 使用点(
.
)运算符来访问结构体变量的成员。例如:struct Student stu = {"Alice", 20, 95.0}; printf("Name: %s, Age: %d, Score: %f\n", stu.name, stu.age, stu.score);
- 如果是指向结构体的指针,则使用箭头(
->
)运算符来访问成员。例如:struct Student *pStu = &stu; printf("Name: %s, Age: %d, Score: %f\n", pStu->name, pStu->age, pStu->score);
- 使用点(
- 结构体的嵌套
- 结构体中可以嵌套其他结构体。例如:
要访问嵌套结构体中的成员,可以使用多级点运算符或者箭头运算符(如果是指针的话)。例如:struct Date { int year; int month; int day; }; struct Student { char name[20]; int age; struct Date birthday; float score; };
struct Student stu = {"Bob", 21, {2000, 5, 10}, 92.0}; printf("Birthday: %d - %d - %d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
- 结构体中可以嵌套其他结构体。例如:
- 结构体数组
- 可以定义结构体数组,它是一组具有相同结构体类型的元素。例如:
初始化结构体数组的方法如下:struct Student students[3];
访问结构体数组元素的成员与访问单个结构体变量的成员类似。例如:struct Student students[3] = {{"Mike", 18, 85.0}, {"John", 19, 90.0}, {"Lily", 20, 92.0}};
for (int i = 0; i < 3; i++) { printf("Student %d: Name: %s, Age: %d, Score: %f\n", i + 1, students[i].name, students[i].age, students[i].score); }
- 可以定义结构体数组,它是一组具有相同结构体类型的元素。例如:
- 结构体在函数中的使用
- 结构体可以作为函数的参数传递,也可以作为函数的返回值。
- 结构体作为参数传递
- 当结构体作为参数传递给函数时,默认是按值传递,这意味着整个结构体内容会被复制一份传递给函数。例如:
void printStudent(struct Student stu) { printf("Name: %s, Age: %d, Score: %f\n", stu.name, stu.age, stu.score); }
- 如果结构体较大,按值传递可能会导致效率低下,可以使用指针传递来提高效率。例如:
void modifyStudent(struct Student *pStu) { pStu->age++; }
- 当结构体作为参数传递给函数时,默认是按值传递,这意味着整个结构体内容会被复制一份传递给函数。例如:
- 结构体作为返回值
- 函数也可以返回结构体。例如:
struct Student createStudent() { struct Student newStu = {"New Student", 18, 88.0}; return newStu; }
- 函数也可以返回结构体。例如:
结构体在C语言中是一种非常有用的数据组织工具,可以方便地处理复杂的数据结构,提高代码的模块化和可读性。