18-传递结构的地址
14.7.2 传递结构的地址
我们继续解决前面的问题,但是这次把结构的地址作为参数。由于函数要处理 funds 结构,所以必须声明 funds 结构。如程序清单14.6所示。
程序清单14.6 funds2.c 程序
/* funds2.c -- 传递指向结构的指针 */
#include <stdio.h>
#define FUNDLEN 50
struct funds {
char bank[FUNDLEN];
double bankfund;
char save[FUNDLEN];
double savefund;
};
double sum(const struct funds *); /* 参数是一个指针 */
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(const struct funds * money)
{
return(money->bankfund + money->savefund);
}
运行该程序后输出如下:
Stan has a total of $12576.21.
sum() 函数使用指向 funds 结构的指针( money )作为它的参数。把地址 &stan 传递给该函数,使得指针 money 指向结构变量 stan 。然后通过 -> 运算符获取 stan.bankfund 和 stan.savefund 的值。由于该函数不能改变指针所指向值的内容,所以把 money 声明为一个指向 const 的指针。
虽然该函数并未使用其他成员,但是也可以访问它们。注意,必须使用 & 运算符来获取结构的地址。和数组名不同,结构变量名不是其地址的别名。