chunlanse2014

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

9.结构体指针变量作函数参数

在ANSI C标准中允许用结构变量作函数参数进行整体传送。但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。这时由实参传向形参的只是地址,从而减少了时间和空间的开销。

【例11-7】计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。

复制代码
 1 struct stu
 2 {
 3     int num;
 4     char *name;
 5     char sex;
 6     float score;
 7 }boy[5]=
 8 {
 9     {101,"Li ping",'M',45},
10     {102,"Zhang ping",'M',62.5},
11     {103,"He fang",'F',92.5},
12     {104,"Cheng ling",'F',87},
13     {105,"Wang ming",'M',58}
14 };
15 main()
16 {
17     struct stu *ps;
18     void ave(struct stu *ps);
19     ps=boy;
20     ave(ps);
21 }
22 void ave(struct stu *ps)
23 {
24     int c=0,i;
25     float ave,s=0;
26     for(i=0;i<5;i++,ps++)
27     {
28         s+=ps->score;
29         if(ps->score<60) 
30             c+=1;
31     }
32     printf("s=%f\n",s);
33     ave=s/5;
34     printf("average=%f\ncount=%d\n",ave,c);
35 }
复制代码

 

本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。

由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。

posted on   chunlanse2014  阅读(680)  评论(0编辑  收藏  举报

(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示