#include <stdio.h>
// 定义结构体
typedef struct {
int id;
float score;
char name[20];
} Student;
// 定义修改结构体成员值的函数
void modifyStudent(Student *stu) {
stu->id = 2;
stu->score = 85.5;
snprintf(stu->name, sizeof(stu->name), "Alice");
}
int main() {
Student s1 = {1, 78.0, "Bob"};
printf("Before modification:\n");
printf("ID: %d, Score: %.2f, Name: %s\n", s1.id, s1.score, s1.name);
modifyStudent(&s1);
printf("\nAfter modification:\n");
printf("ID: %d, Score: %.2f, Name: %s\n", s1.id, s1.score, s1.name);
return 0;
}
这种参数传递方式相较于直接传递结构体的优势:
- 效率更高:当结构体较大时,传递结构体指针只是传递一个指针(通常为4字节或8字节,取决于系统架构),而传递结构体本身需要复制整个结构体的内容,开销较大。例如一个包含大量数据成员的结构体,传递指针能显著减少内存复制开销,提升程序性能。
- 可以直接修改原结构体:传递结构体指针,函数内部对指针指向的结构体进行修改,能直接反映到调用处的原结构体上。而传递结构体副本的话,函数内对副本的修改不会影响原结构体。