分享

C语言结构体指针变量作函数参数

 昵称34122805 2016-06-15

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

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

  1. struct stu{
  2. int num;
  3. char *name;
  4. char sex;
  5. float score;
  6. }boy[5]={
  7. {101,'Li ping','M',45},
  8. {102,'Zhang ping','M',62.5},
  9. {103,'He fang','F',92.5},
  10. {104,'Cheng ling','F',87},
  11. {105,'Wang ming','M',58}
  12. };
  13. main(){
  14. struct stu *ps;
  15. void ave(struct stu *ps);
  16. ps=boy;
  17. ave(ps);
  18. }
  19. void ave(struct stu *ps){
  20. int c=0,i;
  21. float ave,s=0;
  22. for(i=0;i<5;i++,ps++){
  23. s+=ps->score;
  24. if(ps->score<60) c+=1;
  25. }
  26. printf('s=%f\n',s);
  27. ave=s/5;
  28. printf('average=%f\ncount=%d\n',ave,c);
  29. }
struct stu{ int num; char *name; char sex; float score;}boy[5]={ {101,'Li ping','M',45}, {102,'Zhang ping','M',62.5}, {103,'He fang','F',92.5}, {104,'Cheng ling','F',87}, {105,'Wang ming','M',58}};main(){ struct stu *ps; void ave(struct stu *ps); ps=boy; ave(ps);}void ave(struct stu *ps){ int c=0,i; float ave,s=0; for(i=0;i<5;i++,ps++){ s+=ps->score; if(ps->score<60) c+=1; } printf('s=%f\n',s); ave=s/5; printf('average=%f\ncount=%d\n',ave,c);}
本程序中定义了函数ave,其形参为结构指针变量ps。boy被定义为外部结构数组,因此在整个源程序中有效。在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。然后以ps作实参调用函数ave。在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多