C Primer Plus学习 四十八 使用结构数组的函数

来源:互联网 发布:sql字段前加内容 db2 编辑:程序博客网 时间:2024/05/21 18:33

        假设需要用一个函数处理结构数组。因为数组的名称等同于它的地址,所以可以把数组名传递给函数。 再一次,函数需要访问结构模板。要说明这如何工作,程序将有关货币的程序扩展到两个人, 以具有一个含有两个fiinds结构的数组。

/* 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",

            3024.72,

            "Lucky*s Savings and Loan",

            9237.11

},

{

"Honest Jack's Bank",

            3534.28,

            "Party Time Savings",

3203.89

}

};

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 $19000.00.
        数组名jones是数组的地址。具体地,它是数组第一个元素,即结构j〇nes[0]的地址。因此,指针money域初是由这个表达式给出的:

money = &jones[0};

        因为money指向数组jones的第个元素,所以m〇ney[0】是该数组的第-个元素的另一个名称。同样, moneyn]是第二个元素。每个元素是个funds结构,所以每个元素都可以使用点(.)运算符来访问其结 构成员。

下面这些是要点:

•可以用数组名把数组中第一个结构的地址传递给函数。

•然后可以使用数组的方括号符号来访问数组中的后续结构。注意下面的函数调用和使用数组名有 同样的效果:

sum (& jones[ 0], N)

因为二者都指向同一地址。使用数组名只是传递结构地址的-种间接方法。

•因为函数sum O不用来改变原来的数据,所以我们使用ANSI C的限定词const。





0 0
原创粉丝点击