Как создать массив структур в си
Перейти к содержимому

Как создать массив структур в си

  • автор:

Как создать массив структур в си

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

struct person people[10];

В данном случае определен массив структур person из 10 элементов.

Используем массив структур в программе:

#include struct person < int age; char name[20]; >; int main(void) < struct person people[] = < , , , >; int n = sizeof(people)/sizeof(people[0]); for(int i=0; i return 0; >

В массиве people определено 4 объекта person. При инициализации данные каждой отдельной структуры заключаются во вложенные фигурные скобки:

Обращение к элементам массива структур происходит по индексу people[0] . А чтобы обратиться к элементу структуры из массива, после индекса указывается имя элемента структуры: people[i].name

Консольный вывод программы:

Name: Tom Age: 23 Name: Bob Age: 32 Name: Alice Age: 26 Name: Sam Age: 41

И также как с массивами других типов с массивами структур можно использовать указатели:

#include struct person < int age; char name[20]; >; int main(void) < struct person people[] = < , , , >; int n = sizeof(people)/sizeof(people[0]); for(struct person *p=people; p < people+n; p++) < printf("Name:%s \t Age: %d \n", p->name, p->age); > return 0; >

Здесь в массиве people те же 4 элемента person. Для их просмотра создан указатель *p, который устанавливается на начало массива people. И в цикле получаем элементы структур через этот указатель. После завершения каждой итерации указатель увеличивается на единицу, то есть перемещается в памяти на количество байт, которые занимает одна структура. И эти действия продолжаются пока указатель не дойдет до конца массива, который можно получить через выражение people+n.

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

Возможно, наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr следует написать:

struct addr addr_info[100];

В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.

Для доступа к отдельным структурам массива adar_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:

Как и массивы переменных, массивы структур индексируются с нуля.

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

Возможно, наиболее часто структуры используются в виде массивов структур. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr следует написать:

struct addr addr_info[100];

В результате получаем набор из 100 переменных, устроенных, как объявлено в типе структуры addr.

Для доступа к отдельным структурам массива adar_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:

Как и массивы переменных, массивы структур индексируются с нуля.

Создание массива структур

А вот второе я не очень понял. » Создать структуру (struct) Стек / Очередь, она будет включать в себя массив структур с данными и реализовать основные функции стека/очереди(pop,push,empty,size). ! реализовать стек / очередь на основе статического массива. Я не понимаю, что значит «она будет включать в себя массив структур с данными». Буду очень благодарен, если кто-то сможет объяснить или наведёт пример.

Отслеживать
user361068
задан 7 дек 2020 в 19:25
ladislaus01231 ladislaus01231
15 1 1 серебряный знак 6 6 бронзовых знаков
Так нужен С или С++?
– user361068
7 дек 2020 в 19:35
Желательно си, так как, насколько я знаю, в с++ немного по-другому.
7 дек 2020 в 19:39

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Это значит, что Вам нужно создать ещё одну структуру, которая будет хранить в себе массив элементов типа docEdit . Ну и функции для работы с этой структурой. Вот заготовка для стека:

#include #define MAX_STACK_SIZE 64 #define TEXT_SIZE 20 struct docEdit < char text[TEXT_SIZE]; int StrNum; >; struct Stack < docEdit items[MAX_STACK_SIZE]; int top; // Индекс свободной вершины стека >; // Функция инициализации стека void StackInit(struct Stack* st); // Функция добавления элемента в стек void StackPush(struct Stack* st, struct docEdit de); // Функция извлечения из стека void StackPop(struct Stack* st); // Функция проверки на пустоту стека int StackIsEmpty(struct Stack* st); // Функция проверки на максимальную заполненность стека int StackIsFull(struct Stack* st); // Функция, которая возвращает количество элементов в стеке int StackSize(struct Stack* st); // Функция, которая возвращает указатель на элемент вершины стека для доступа к нему docEdit* StackTop(struct Stack* st); 

Реализацию функций оставляю на Вас:)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *