在编写程序时,可以用结构体变量作为函数参数进行传递。但是这种方式耗费的时间和空间很大,每个成员要逐个进行值传送,特别是成员为数组时,严重降低了程序的运行效率。引入结构体指针,即用指针变量作为函数参数进行传递,这时由实参传向形参的只是地址,从而减少了时间和空间的开销。
【例8.6】用结构体指针做参数,修改结构体变量的值。
程序内容如下:
1 /*这是一个有关于结构体指针知识讲解的事例程序*/
2 #include<stdio.h>
3 #include<string.h>
4 struct Student //定义结构体类型
5 {
6 char name[20];
7 int num;
8 char gender;
9 float score;
10 };
11 void modify(struct Student*stu) //结构体指针作为函数参数
12 {
13 char str[20]="Zhang jun";
14 strcpy((*stu).name,str);
15 (*stu).num=20180306;
16 (*stu).score=92;
17 }
18 int main()(www.xing528.com)
19 {
20 struct Student stu={"Li lin",20180101,′F′,98};//定义结构体变量
21 printf("%-10s%8d%2c%8.2f\n",stu.name,stu.num,stu.gender,stu.score);
22 modify(&stu); //调用函数modify
23 printf("%-10s%8d%2c%8.2f\n",stu.name,stu.num,stu.gender,stu.score);
24 return 0;
25 }
程序结果如图8.10所示:
图8.10 例8.6程序结果图
【例题中关键问题说明】
(1)本程序中,定义struct Studen结构体类型,在main函数中定义结构体变量stu并赋初始值.
(2)调用modify函数来修改结构体变量成员的值。在调用函数过程中用结构体指针*stu做参数,并将修改后的值返回,最后将信息输出。
需要注意:
将一个结构体变量中的数据传递给另一个函数,有以下三种方法。
(1)用结构体变量名作为参数。这种方式采取“值传递”的方式,将结构体变量所占的内存单元的内容全部顺序传递给形参。在函数调用期间形参也要占用内存单元。这种传递方式在空间和时间上开销较大,并且由于采用值传递方式,如果在函数被执行期间改变了形参的值,该值不能反映到主调函数中对应的实参,这往往不能满足使用要求。因此一般较少使用这种方法。
(2)用结构体变量的成员作参数。例如“stu[1].name”,这种用法和用普通变量是一样的,也属于“值传递”方式。
(3)用指向结构体变量的指针作为函数参数。这种方式虽然也是值传递的方式,但是这次传递的值却是指针。通过改变指针指向的结构体变量的值,可以间接改变实参的值。并且在调用函数期间,仅仅建立了一个指针变量,大大地减少了系统的开销。
对于数组,包括结构体数组,用指针作函数参数比较好,只传递地址肯定要比传递数组的所有数据效率更高。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。