C 语言结构体基础
介绍
在C语言中,结构体(struct
)是一种用户自定义的数据类型,它允许你将不同类型的数据组合在一起,形成一个逻辑上相关的整体。结构体非常适合用于表示复杂的数据结构,例如学生信息、员工记录等。
结构体的主要特点是:
- 可以包含多个不同类型的成员变量。
- 每个成员变量可以单独访问和操作。
- 结构体变量可以像普通变量一样传递和使用。
定义结构体
在C语言中,使用 struct
关键字来定义结构体。结构体的定义通常放在函数外部,以便在整个程序中都可以使用。
struct Student {
char name[50];
int age;
float gpa;
};
在上面的例子中,我们定义了一个名为 Student
的结构体,它包含三个成员:name
(字符数组)、age
(整数)和 gpa
(浮点数)。
结构体的定义只是创建了一个模板,并没有分配内存。只有在声明结构体变量时,才会分配内存。
声明结构体变量
定义结构体后,可以声明该结构体类型的变量。例如:
struct Student student1;
这里,student1
是一个 Student
类型的变量。我们可以通过 .
运算符来访问结构体的成员:
strcpy(student1.name, "Alice");
student1.age = 20;
student1.gpa = 3.8;
初始化结构体
结构体变量可以在声明时进行初始化。例如:
struct Student student2 = {"Bob", 22, 3.5};
在这个例子中,student2
的 name
被初始化为 "Bob"
,age
被初始化为 22
,gpa
被初始化为 3.5
。
访问结构体成员
使用 .
运算符可以访问结构体的成员。例如:
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("GPA: %.2f\n", student1.gpa);
输出结果为:
Name: Alice
Age: 20
GPA: 3.80
结构体数组
结构体也可以用于定义数组。例如,我们可以定义一个包含多个学生信息的数组:
struct Student students[3] = {
{"Alice", 20, 3.8},
{"Bob", 22, 3.5},
{"Charlie", 21, 3.9}
};
我们可以通过下标访问数组中的每个结构体变量:
for (int i = 0; i < 3; i++) {
printf("Student %d: %s, %d, %.2f\n", i+1, students[i].name, students[i].age, students[i].gpa);
}
输出结果为:
Student 1: Alice, 20, 3.80
Student 2: Bob, 22, 3.50
Student 3: Charlie, 21, 3.90
结构体指针
结构体变量也可以通过指针来访问。使用 ->
运算符可以访问指针所指向的结构体的成员。例如:
struct Student *ptr = &student1;
printf("Name: %s\n", ptr->name);
printf("Age: %d\n", ptr->age);
printf("GPA: %.2f\n", ptr->gpa);
输出结果与之前相同:
Name: Alice
Age: 20
GPA: 3.80
实际应用场景
结构体在实际编程中有广泛的应用。例如,在管理学生信息的系统中,可以使用结构体来表示每个学生的信息:
struct Student {
char name[50];
int age;
float gpa;
};
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 = {"Alice", 20, 3.8};
printStudent(student1);
return 0;
}
在这个例子中,printStudent
函数接受一个 Student
类型的结构体变量,并打印出学生的信息。
总结
结构体是C语言中非常重要的概念,它允许你将不同类型的数据组合在一起,形成一个逻辑上相关的整体。通过结构体,你可以更有效地管理和操作复杂的数据结构。
练习:尝试定义一个表示“图书”的结构体,包含书名、作者和价格。然后编写一个程序,初始化几本书的信息并打印出来。