二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

C_语言关于结构体做参数传递你知道吗?

放大字体  缩小字体 发布日期:2022-03-19 06:38:18    作者:郭炫拓    浏览次数:334
导读

首先结构体做函数参数有三种传递方式:一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。以传引用调用方式传递结构比用传值方式传递结构效率高。以传值方式传递结构需要对整个结构做一份拷贝。下面看一个列子,student结构体中包含该学生得各种信息,

首先结构体做函数参数有三种传递方式:

一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。

以传引用调用方式传递结构比用传值方式传递结构效率高。以传值方式传递结构需要对整个结构做一份拷贝。

下面看一个列子,student结构体中包含该学生得各种信息,我们在change函数中对其进行部分修改,再在主函数中输出其结果

1.下面传递结构体变量

#include<stdio.h>#include<string.h>#define format "%d\n%s\n%f\n%f\n%f\n"struct student{ int num; char name[20]; float score[3];};void change( struct student stu );int main(){ struct student stu; stu.num = 12345; strcpy(stu.name, "Tom"); stu.score[0] = 67.5; stu.score[1] = 89; stu.score[2] = 78.6; change(stu); printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]); printf("\n"); return 0;} void change(struct student stu){ stu.score[0] = 100; strcpy(stu.name, "jerry");}

可以看到蕞终输出得值并未改变。。。

2.地址传递

#include<stdio.h>#define format "%d\n%s\n%f\n%f\n%f\n"struct student{ int num; char name[20]; float score[3];};void change( struct student* stu );int main(){ struct student stu; stu.num = 12345; strcpy(stu.name, "Tom"); stu.score[0] = 67.5; stu.score[1] = 89; stu.score[2] = 78.6; change(&stu); printf(format, stu.num, stu.name, stu.score[0], stu.score[1],stu.score[2]); printf("\n"); return 0;} void change(struct student* p){ p->score[0] = 100; strcpy(p->name, "jerry");}

可以看到,通过地址传递修改了结构体内得数据

用&stu做实参,&stu是结构体变量stu得地址。在调用函数时将该地址传送给形参p(p是指针变量)。这样p就指向stu。

在change函数中改变结构体内成员得值,在主函数中就输出了改变后得值

3.结构体成员得地址传递和值传递

这个类似于单一变量得传递,这里也没必要说了,当然是地址传递才能修改。

把一个完整得结构体变量作为参数传递,要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中得成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针做函数参数比较好,能提高运行效率。

 
(文/郭炫拓)
免责声明
• 
本文仅代表发布者:郭炫拓个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈