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

27-使用结构数组的函数

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

14.7.11 使用结构数组的函数

假设一个函数要处理一个结构数组。由于数组名就是该数组的地址,所以可以把它传递给函数。另外,该函数还需访问结构模板。为了理解该函数的工作原理,程序清单14.13把前面的金融程序扩展为两人,所以需要一个内含两个 funds 结构的数组。

程序清单14.13  funds4.c 程序

/* funds4.c -- 把结构数组传递给函数 */
#include <stdio.h>
#define FUNDLEN 50
#define N 2
struct funds {
     char      bank[FUNDLEN];
     double    bankfund;
     char      save[FUNDLEN];
     double    savefund;
};
double sum(const struct funds money [], int n);
int main(void)
{
     struct funds jones[N] = {
               {
                    "Garlic-Melon Bank",
                    4032.27,
                    "Lucky's Savings and Loan",
                    8543.94
               },
               {
                    "Honest Jack's Bank",
                    3620.88,
                    "Party Time Savings",
                    3802.91
               }
     };
     printf("The Joneses have a total of $%.2f.\n",sum(jones, N));
     return 0;
}
double sum(const struct funds money [], int n)
{
     double total;
     int i;
     for (i = 0, total = 0; i < n; i++)
          total += money[i].bankfund + money[i].savefund;
     return(total);
}

该程序的输出如下:

The Joneses have a total of $20000.00.

(读者也许认为这个总和有些巧合!)

数组名 jones 是该数组的地址,即该数组首元素( jones[0] )的地址。因此,指针 money 的初始值相当于通过下面的表达式获得:

money = &jones[0];

因为 money 指向 jones 数组的首元素,所以 money[0] 是该数组首元素的另一个名称。与此类似, money[1] 是第2个元素。每个元素都是一个 funds 类型的结构,所以都可以使用点运算符( . )来访问 funds 类型结构的成员。

下面是几个要点。

 可以把数组名作为数组中第1个结构的地址传递给函数。 
 然后可以用数组表示法访问数组中的其他结构。注意下面的函数调用与使用数组名效果相同:    sum(&jones[0], N)因为jones和&jones[0]的地址相同,使用数组名是传递结构地址的一种间接的方法。  
 由于sum()函数不能改变原始数据,所以该函数使用了ANSI C的限定符const。