函数的参数
使用结构体变量的作为函数的实参时,采取的是"值传递",会将结构体变量所占内存单元的内容全部顺序传递给形参,形参也必须是同类型的结构体变量
void display(struct Student stu);
在形参位置使用结构体变量,但是函数调用期间,形参也要占用内存单元,这种传递方式在空间和时间上开销都比较大。
根据函数参数传值方式,如果在函数内部修改了变量中成员的值,则改变的值不会返回到主调函数中。
第二种:使用结构体变量的指针作为参数
在使用结构体变量作为函数的参数时,传值过程中空间和时间开销大,可以使用结构体变量的指针作为函数的参数进行传递。
在使用结构体变量的指针时,只是将结构体变量的首地址进行传递,并没有将变量的副本进行传递。
void display(struct Student *stu);
因为这里传递的变量时地址,如果在函数中改变成员中的数据,那么返回主调函数时变量会发生改变。
#include <stdio.h>
struct Student {
char name[20];
float score[30];
} student = { "刘备", 98.39f, 89.0, 93.5f };
void display(struct Student *s) {
printf("-------------以下是学生信息-------------\n");
printf("姓名: %s\n", s->name);
printf("数学成绩: %.2f\n", s->score[2]);
// 修改了数组元素的值
s->score[2] = 90.2f;
}
int main(int argc, char const *argv[]) {
struct Student *pStudent;
pStudent = &student;
display(pStudent);
// 也可以直接传递结构体变量的地址作为参数
// display(&student);
// 主调函数中,结构体成员的值发生了改变
printf("修改后的数学成绩: %.2f\n", pStudent->score[2]);
return 0;
}