Использование массива
Использование массива
Предположим, у нас есть массив структур. Имя массива является синонимом его адреса, поэтому его можно передать функции. С другой стороны, функции будет необходим доступ к структурному шаблону. Чтобы показать, как такая программа работает (рис. 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])
дал бы тот же самый эффект, что и применение имени массива, так как оба они ссылаются на один и тот же адрес. Использование имени массива является просто косвенным способом передачи адреса структуры.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Создание массива
Создание массива 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 с успехом хранит в массивах строки, даты, денежные значения и данные любых числовых типов.* В одном массиве могут храниться данные только одного типа. Нельзя
8.1.1. Создание и инициализация массива
8.1.1. Создание и инициализация массива Для создания массива применяется специальный метод класса []; перечисленные внутри скобок данные помещаются во вновь созданный массив. Ниже показаны три способа вызвать этот метод. (Массивы а, b и с инициализируются одинаково.)a = Array.[]
8.1.3. Определение размера массива
8.1.3. Определение размера массива Метод length и его синоним size возвращают число элементов в массиве. (Как всегда, эта величина на единицу больше индекса последнего элемента.)x = ["а", "b", "с", "d"]а = x.length # 4b = x.size # 4Метод nitems отличается от предыдущих тем, что не учитывает элементы
8.1.5. Сортировка массива
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. Рандомизация массива
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
Описание массива структур
Описание массива структур Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива: struct book libry [MAXBKS];Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book.
Объявление массива
Объявление массива Синтаксис:[<спецификация типа]> <описатель> [<константное выражение>];[<спецификация типа]> <описатель> [];Квадратные скобки, следующие за описателем, являются элементом языка Си, а не признаком необязательности синтаксической
Свойства массива
Свойства массива Некоторые замечания о классе.[x]. Подобные классы существуют для массивов большей размерности: ARRAY2 и т. д.[x]. Компонент Count может быть реализован и как атрибут и как функция, поскольку count = upper - lower+1. В реальном классе это выражается инвариантом, как