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 。