![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Массивы структур
При необходимости хранения некоторых данных в виде нескольких массивов одной размерности, но разного типа, возможна организация массива структур. Наглядно массив структур можно представить в виде таблицы, где столбцы таблицы представляют собой поля структуры, а строки – элементы массива структур. Например, имеется два разнотипных массива: char c[N]; int i[N]; Объявление struct key { char c; int i; } keytab[N]; создает тип структуры key и объявляет массив keytab[N], каждый элемент которого есть структура типа key. Возможна запись: struct key { char c; int i; }; struct key keytab[N]; Инициализация массива структур выполняется следующим образом: struct key { char c; int i; } keytab[]={ 'a', 0, 'b', 0 }; В этом примере создается массив на две структуры типа key с именем keytab. Рассмотрим обращение к полю структуры в этом случае – для примера выведем на экран содержимое массива: for(int i=0; i< 2; i++) printf(" %c %d\n", keytab[i].c, keytab[i].i); При обращении к полю структуры сначала происходит обращение к элементу массива (keytab[i]), а затем только обращение к полю структуры (keytab[i].c). Доступ к полю элемента массива структур может быть получен через константу-указатель на массив и смещение внутри массива, например, доступ к полю элемента массива с номером i следует записать следующим образом: (*(keytab+i)).c или (keytab+i)→ c. Массив структур также может быть передан в функцию в качестве аргумента, передача массива происходит через указатель на массив. Пример программы, в которой массив точек формируется и выводится на экран с помощью функций: #include < stdio.h> #define N 5 struct point { int x, y; }; void form_mas(struct point* mas, int n) { printf(" Enter koordinates! \n"); for(int i=0; i< n; i++) { printf(" x→ "); scanf(" %d", & mas[i].x); printf(" y→ "); scanf(" %d", & mas[i].y); } } void print_mas(struct point* mas, int n) { printf(" x y\n"); for(int i=0; i< n; i++) printf(" %4d %6d\n", (mas+i)→ x, (mas+i)→ y); } int main() { struct point Points[N]; form_mas(Points, N); print_mas(Points, N); return 0; } Функция form_mas() заполняет массив точек, который передан в функцию через указатель mas. Параметр функции n определяет количество элементов массива. Доступ к элементу массива – через операцию. (точка). Выражение & mas[i].x вычисляет адрес элемента структуры mas[i].x, так как операция & имеет более низкий приоритет, чем операции [] и · (точка). Функция print_mas() выводит массив на экран. Передача массива в функцию происходит также через указатель mas. Параметр n – количество элементов массива. Доступ к элементу массива – через операцию → (стрелка).
|