当前位置:嗨网首页>书籍在线阅读

19-传递结构

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

14.7.3 传递结构

对于允许把结构作为参数的编译器,可以把程序清单14.6重写为程序清单14.7。

程序清单14.7  funds3.c 程序

/* funds3.c -- 传递一个结构 */
#include <stdio.h>
#define FUNDLEN 50
struct funds {
     char   bank[FUNDLEN];
     double bankfund;
     char   save[FUNDLEN];
     double savefund;
};
double sum(struct funds moolah);  /* 参数是一个结构 */
int main(void)
{
     struct funds stan = {
          "Garlic-Melon Bank",
          4032.27,
          "Lucky's Savings and Loan",
          8543.94
     };
     printf("Stan has a total of $%.2f.\n", sum(stan));
     return 0;
}
double sum(struct funds moolah)
{
     return(moolah.bankfund + moolah.savefund);
}

下面是运行该程序后的输出:

Stan has a total of $12576.21.

该程序把程序清单 14.6 中指向 struct funds 类型的结构指针 money 替换成 struct funds 类型的结构变量 moolah 。调用 sum() 时,编译器根据 funds 模板创建了一个名为 moolah 的自动结构变量。然后,该结构的各成员被初始化为 stan 结构变量相应成员的值的副本。因此,程序使用原来结构的副本进行计算,然而,传递指针的程序清单14.6使用的是原始的结构进行计算。由于 moolah 是一个结构,所以该程序使用 moolah.bankfund ,而不是 moolah->bankfund 。另一方面,由于 money 是指针,不是结构,所以程序清单14.6使用的是 money->bankfund