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

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.bankfundstan.savefund 的值。由于该函数不能改变指针所指向值的内容,所以把 money 声明为一个指向 const 的指针。

虽然该函数并未使用其他成员,但是也可以访问它们。注意,必须使用 & 运算符来获取结构的地址。和数组名不同,结构变量名不是其地址的别名。