Использование массива
Использование массива
Предположим, у нас есть массив структур. Имя массива является синонимом его адреса, поэтому его можно передать функции. С другой стороны, функции будет необходим доступ к структурному шаблону. Чтобы показать, как такая программа работает (рис. 14.8), мы расширим нашу программу таким образом, чтобы она обслуживала двух человек, а мы, следовательно, имели бы массив двух структур funds.
/* передача массива структур в функцию */
struct funds {
char *bank;
float bankfund;
char *save;
float savefund; }
jones[2] ={
{ " Банк синьора Помидора" ,
1023.43,
" Сбережения и займы Снупи" ,
4239.87 },
{ " Банк Честного Джека",
976.57,
"Накопления по предварительному плану",
1760.13 } };
main( )
{
float total, sum( );
printf("Джонсы имеют всего %.2f долл. ", sum(jones));
}
float sum(money);
struct funds *money;
{
float total;
int i;
for( i = 0, total = 0; i < 2; i++, money++ )
total += money- > bankfund + money -> savefund;
return(total);
}
РИС. 14. 8. Программа, передающая функции массив структур.
Программа выдает
Джонсы имеют всего 8000.00 долл.
(Что за круглая сумма! Можно подумать, что эти цифры взяты с потолка.) Имя массива jones является указателем на массив. В частности, оно ссылается на первый элемент массива, который является структурой jones[0]. Таким образом, в начале указатель money за дается через
money = &jones[0];
Затем использование операции - > позволяет нам добавить два вклада для первого Джонса. Это действительно очень похоже на последний пример. Далее, цикл for увеличивает указатель money на 1. Теперь он ссылается на следующую структуру, jones[1], и остаток вкладов может быть добавлен к total.
Вот два основных замечания:
1. Имя массива можно использовать для передачи в функцию указателя на первую структуру в массиве.
2. Затем можно использовать арифметическую операцию над указателем, чтобы передвигать его на последующие структуры в массиве. Заметим, что вызов функции
sum(&jones[0])
дал бы тот же самый эффект, что и применение имени массива, так как оба они ссылаются на один и тот же адрес. Использование имени массива является просто косвенным способом передачи адреса структуры.