Использование массива

Использование массива

     Предположим, у нас есть массив структур. Имя массива является синонимом его адреса, поэтому его можно передать функции. С другой стороны, функции будет необходим доступ к структурному шаблону. Чтобы показать, как такая программа работает (рис. 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])

дал бы тот же самый эффект, что и применение имени массива, так как оба они ссылаются на один и тот же адрес. Использование имени массива является просто косвенным способом передачи адреса структуры.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Свойства массива

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Свойства массива Некоторые замечания о классе.[x]. Подобные классы существуют для массивов большей размерности: ARRAY2 и т. д.[x]. Компонент Count может быть реализован и как атрибут и как функция, поскольку count = upper - lower+1. В реальном классе это выражается инвариантом, как


8.1.1. Создание и инициализация массива

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

8.1.1. Создание и инициализация массива Для создания массива применяется специальный метод класса []; перечисленные внутри скобок данные помещаются во вновь созданный массив. Ниже показаны три способа вызвать этот метод. (Массивы а, b и с инициализируются одинаково.)a = Array.[]


8.1.3. Определение размера массива

Из книги Справочник по PHP автора

8.1.3. Определение размера массива Метод length и его синоним size возвращают число элементов в массиве. (Как всегда, эта величина на единицу больше индекса последнего элемента.)x = ["а", "b", "с", "d"]а = x.length # 4b = x.size   # 4Метод nitems отличается от предыдущих тем, что не учитывает элементы


8.1.5. Сортировка массива

Из книги VBA для чайников автора Каммингс Стив

8.1.5. Сортировка массива Самый простой способ отсортировать массив — воспользоваться встроенным методом sort:words = %w(the quick brown fox)list = words.sort # ["brown", "fox", "quick", "the"]# Или отсортировать на месте:words.sort!       # ["brown", "fox", "quick", "the"]Здесь предполагается, что все элементы массива сравнимы


8.1.10. Рандомизация массива

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

8.1.10. Рандомизация массива Иногда нужно переставить элементы массива в случайном порядке. Первое, что приходит на ум, — тасование карточной колоды, но есть и другие применения — например, случайная сортировка списка вопросов.Для решения этой задачи пригодится метод rand из


8.1.17. Использование массива в качестве стека или очереди

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

8.1.17. Использование массива в качестве стека или очереди Базовые операции со стеком называются push и pop, они добавляют и удаляют элементы в конец массива. Базовые операции с очередью — это shift (удаляет элемент из начала массива) и unshift (добавляет элемент в начало массива). Для


8.1.18. Обход массива

Из книги Язык Си - руководство для начинающих автора Прата Стивен

8.1.18. Обход массива Как и следовало ожидать, в классе Array есть стандартный итератор each. Но имеются и другие полезные итераторы.Метод reverse_each обходит массив в обратном порядке. Результат такой же, как если бы мы вызвали сначала метод reverse, а потом each, но работает быстрее.words =


8.1.20. Обращение массива

Из книги автора

8.1.20. Обращение массива Чтобы переставить элементы массива в обратном порядке, воспользуйтесь методами reverse или reverse!:inputs = ["red", "green", "blue"]outputs = inputs.reverse # ["green","blue","red"]priorities = %w(eat sleep code)priorities.reverse! #


8.1.21. Удаление дубликатов из массива

Из книги автора

8.1.21. Удаление дубликатов из массива Чтобы удалить из массива повторяющиеся экземпляры, воспользуйтесь методом uniq (или его вариантом для модификации на месте uniq!):breakfast = %w[spam spam eggs ham eggs spam]lunch = breakfast.uniq # ["spam","eggs","ham"]breakfast.uniq! # Массив breakfast


Создание массива

Из книги автора

Создание массива arrayСоздание и инициализация массива.Синтаксис:array array([mixed ...])Функция возвращает созданный массив. Индексы и значения в массиве разделяются оператором =. Пары index=value разделяются запятыми, они определяют индекс и значение.Индекс может быть как числовым, так


Курсор массива

Из книги автора

Курсор массива resetПроизводит сброс курсора массива.Синтаксис:mixed reset(array arr)Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.Пример использования функции reset():<?php$array = array("step one", "step two", "step three", "step four"); // by default,


Ссылка на элемент массива

Из книги автора

Ссылка на элемент массива Каждый массив в VBA имеет имя, т.е. аналог заголовка списка на листе бумаги. Чтобы работать с отдельным элементом массива, нужно сослаться на него по имени массива и индексу - целому числу, соответствующему месту элемента в массиве. Например,


Данные массива

Из книги автора

Данные массива При работе с массивами нужно помнить следующее.* Можно создавать массивы данных любых типов. VBA с успехом хранит в массивах строки, даты, денежные значения и данные любых числовых типов.* В одном массиве могут храниться данные только одного типа. Нельзя


Объявление массива

Из книги автора

Объявление массива Синтаксис:[<спецификация типа]> <описатель> [<константное выражение>];[<спецификация типа]> <описатель> [];Квадратные скобки, следующие за описателем, являются элементом языка Си, а не признаком необязательности синтаксической


Описание массива структур

Из книги автора

Описание массива структур      Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива: struct book libry [MAXBKS];Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book.