跳到主要内容

C 语言结构体访问

在C语言中,结构体(struct)是一种用户定义的数据类型,它允许我们将不同类型的数据组合在一起。结构体的成员可以是基本数据类型(如 intfloat 等),也可以是其他结构体或数组。为了访问结构体中的成员,C语言提供了两种运算符:点运算符(.箭头运算符(->

1. 点运算符(.

点运算符用于直接访问结构体变量的成员。它的语法非常简单:

c
结构体变量名.成员名

示例代码

c
#include <stdio.h>

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

int main() {
// 声明一个结构体变量
struct Student student1;

// 访问并赋值
strcpy(student1.name, "Alice");
student1.age = 20;
student1.score = 95.5;

// 访问并打印
printf("Name: %s\n", student1.name);
printf("Age: %d\n", student1.age);
printf("Score: %.2f\n", student1.score);

return 0;
}

输出

Name: Alice
Age: 20
Score: 95.50
备注

点运算符只能用于直接访问结构体变量的成员,不能用于访问指向结构体的指针的成员。

2. 箭头运算符(->

箭头运算符用于访问指向结构体的指针的成员。它的语法如下:

c
结构体指针->成员名

示例代码

c
#include <stdio.h>
#include <stdlib.h>

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

int main() {
// 声明一个结构体指针
struct Student *studentPtr;

// 动态分配内存
studentPtr = (struct Student *)malloc(sizeof(struct Student));

// 访问并赋值
strcpy(studentPtr->name, "Bob");
studentPtr->age = 22;
studentPtr->score = 88.5;

// 访问并打印
printf("Name: %s\n", studentPtr->name);
printf("Age: %d\n", studentPtr->age);
printf("Score: %.2f\n", studentPtr->score);

// 释放内存
free(studentPtr);

return 0;
}

输出

Name: Bob
Age: 22
Score: 88.50
提示

箭头运算符实际上是点运算符的简写形式。studentPtr->age 等价于 (*studentPtr).age

3. 实际应用场景

结构体访问在实际编程中非常常见,尤其是在处理复杂数据结构时。以下是一个实际案例,展示了如何使用结构体访问来管理学生信息。

案例:学生管理系统

c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

// 函数:打印学生信息
void printStudent(struct Student *student) {
printf("Name: %s\n", student->name);
printf("Age: %d\n", student->age);
printf("Score: %.2f\n", student->score);
}

int main() {
// 声明一个结构体数组
struct Student students[3];

// 初始化学生信息
strcpy(students[0].name, "Alice");
students[0].age = 20;
students[0].score = 95.5;

strcpy(students[1].name, "Bob");
students[1].age = 22;
students[1].score = 88.5;

strcpy(students[2].name, "Charlie");
students[2].age = 21;
students[2].score = 92.0;

// 打印所有学生信息
for (int i = 0; i < 3; i++) {
printf("Student %d:\n", i + 1);
printStudent(&students[i]);
printf("\n");
}

return 0;
}

输出

Student 1:
Name: Alice
Age: 20
Score: 95.50

Student 2:
Name: Bob
Age: 22
Score: 88.50

Student 3:
Name: Charlie
Age: 21
Score: 92.00
警告

在使用结构体指针时,务必确保指针指向的内存是有效的,否则会导致未定义行为。

4. 总结

通过本文,我们学习了如何在C语言中访问结构体成员。我们介绍了点运算符和箭头运算符的使用方法,并通过实际案例展示了它们的应用场景。结构体访问是C语言中非常重要的概念,掌握它将帮助你更好地处理复杂的数据结构。

5. 附加资源与练习

  • 练习1:定义一个结构体 Employee,包含 nameidsalary 三个成员。编写程序,使用点运算符和箭头运算符分别访问并打印这些成员。
  • 练习2:创建一个结构体数组,存储多个 Employee 的信息,并编写一个函数来计算所有员工的平均工资。
注意

在编写代码时,务必注意内存管理,避免内存泄漏或非法访问。