17-传递结构成员
14.7.1 传递结构成员
只要结构成员是一个具有单个值的数据类型(即, int 及其相关类型、 char 、 float 、 double 或指针),便可把它作为参数传递给接受该特定类型的函数。程序清单14.5中的财务分析程序(初级版本)演示了这一点,该程序把客户的银行账户添加到他/她的储蓄和贷款账户中。
程序清单14.5 funds1.c 程序
/* funds1.c -- 把结构成员作为参数传递 */
#include <stdio.h>
#define FUNDLEN 50
struct funds {
char bank[FUNDLEN];
double bankfund;
char save[FUNDLEN];
double savefund;
};
double sum(double, double);
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.bankfund, stan.savefund));
return 0;
}
/* 两个double类型的数相加 */
double sum(double x, double y)
{
return(x + y);
}
运行该程序后输出如下:
Stan has a total of $12576.21.
看来,这样传递参数没问题。注意, sum() 函数既不知道也不关心实际的参数是否是结构的成员,它只要求传入的数据是 double 类型。
当然,如果需要在被调函数中修改主调函数中成员的值,就要传递成员的地址:
modify(&stan.bankfund);
这是一个更改银行账户的函数。
把结构的信息告诉函数的第2种方法是,让被调函数知道自己正在处理一个结构。