Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подбельский Фомин_Программирование на языке СИ_...doc
Скачиваний:
342
Добавлен:
10.08.2019
Размер:
53.81 Mб
Скачать

Массивы структур.

Массивы структур. Определяются массивы структур так же, как и массивы других типов данных. Естественное отличие - служебное слово struct в названии структурного типа (если обозначение типа не введено с помощью typedef). Для введенных выше структурных типов можно определить:

Эти предложения определяют list как массив, состоящий из MAX_GOODS элементов - структур типа goods, a set - массив структур типа complex, состоящий из 80 элементов. (Идентификатор MAX_GOODS должен быть именем константы.)

Имена list и set не являются именами структур, это имена массивов, элементами которых являются структуры. list[0] -есть структура типа goods, list[l] - вторая структура типа goods из массива list[ ] и т.д.

Для доступа к компонентам структур, входящих в массив структур, используются уточненные имена с индексированием первого имени (имени массива). Например:

set[4].real - первый компонент (с именем real) типа double структуры типа complex, входящей в качестве пятого (от начала) элемента в массив структур set[ ];

list[0].price - второй компонент (с именем price) типа long структуры типа goods, входящей в качестве первого элемента (с нулевым индексом) в массив структур list[ ]

На рис. 6.2 условно изображена схема размещения в памяти массива list[ ]. Его элементы (как и элементы любого другого массива) размещаются в основной памяти подряд в соответствии с возрастанием индекса.

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

struct goods list [MAX_GOODS];

Рис. 6.2. Массив структур (MAX_GOODS=100)

Еще раз обратите внимание на индексирование в уточненном имени при обращении к компонентам структур, принадлежащих массиву. Индекс записывается непосредственно после имени массива структур. Тем самым из массива выделяется нужная структура, а уже с помощью точки и последующего имени идентифицируется соответствующий компонент структуры. Будет ошибкой поместить индекс после всего уточненного имени. Например, запись:

- ошибочное имя; percent - переменная типа float, а не массив.

В следующей программе вводится и инициализируется массив структур, каждая из которых описывает точечную массу (материальную точку). Для определенной таким образом системы материальных точек вычисляется центр масс (координаты хс, ус, zc центра масс).

Если т1, m2, …,mn - массы материальных точек; xi yi zi - координаты отдельной точки (i=l, n), то имеем:

- общая масса системы точек.

Как и массивы других типов, массив структур при определении может быть инициализирован. Инициализатор массива структур должен содержать в фигурных скобках список начальных значений структур массива. В свою очередь, каждое начальное значение для структуры - это список значений ее компонентов (также в фигурных скобках).

Координаты центра масс:

Текст программы с массивом структур:

Результат выполнения программы:

Указатели на структуры.

Указатели на структуры. Эти указатели определяются, как и указатели на данные других типов. Как обычно, для структурных типов название типа состоит из двух слов - служебного слова struct и имени уже определенного структурного типа, например:

Указатели на структуры могут вводиться и для безымянных структурных типов:

И как обычно, если название структурного типа введено с помощью typedef, то при определении указателей название этого типа может использоваться без предшествующего служебного слова struct:

При определении указателя на структуру он может быть инициализирован. Наиболее корректно в качестве инициализирующего значения применять адрес структурного объекта того же типа, что и тип определяемого указателя:

Значение указателя на структуру может быть определено и с помощью обычного присваивания: