结构体变量作为函数参数
结构体变量作为函数参数的用法与普通变量类似,都需要保证调用函数的实参类型和被调用函数的形参类型相同。结构体变量作为函数参数时,也是值传递,被调函数中改变结构体成员变量的值,主调函数中的结构体变量不受影响。
下面通过一个案例演示结构体变量作为函数参数调用,如例1所示。
例1 demo1.c
1 #include <stdio.h>
2 struct Student //定义struct Student结构体类型
3 {
4 char name[50];
5 int studentID;
6 };
7 void change(struct Student stu) //struct Student结构体变量作为函数参数
8 {
9 strcpy(stu.name, "lisi"); //改变结构体变量的值
10 stu.studentID = 2;
11 printf("change()函数:");
12 printf("name = %s studentID = %d\n", stu.name, stu.studentID);
13 }
14 int main()
15 {
16 struct Student student = { "Zhang San", 1 }; //定义结构体变量student
17 change(student); //调用change()函数,student变量作为参数
18 printf("main()函数:");
19 printf("name = %s studentID = %d\n", student.name, student.studentID);
20 return 0;
21 }
例1运行结果如图1所示。
图1 例1运行结果
在例1中,第2~6行代码定义了struct Student结构体类型,它有name和studentID两个成员。第7~13行代码定义了change()函数,该函数以struct Student结构体变量作为形式参数,在change()函数内部,改变结构体变量成员的值,并输出结构体变量的成员值。在第14~21行的main()函数中,第16行代码定义了struct Student结构体变量student并初始化。第17行代码调用change()函数并将student作为参数。第18~19行代码打印输出struct Student结构体变量student的成员值。由图1可知,change()函数改变了结构体变量student中的成员值,但main()函数中的结构体变量student的成员值没有受到影响。