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

Последнее обновление: 10.01.2023

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

struct person people[10];

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

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

#include <stdio.h>

struct person 
{
	int age;
	char name[20];
};

int main(void)
{
	struct person people[] = { {23, "Tom"}, {32, "Bob"}, {26, "Alice"}, {41, "Sam"}};
	int n = sizeof(people)/sizeof(people[0]);
	for(int i=0; i<n; i++)
	{
		printf("Name:%s \t Age: %d \n", people[i].name, people[i].age);
	}
	return 0;
}

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

{ {23, "Tom"}, {32, "Bob"}, {26, "Alice"}, {41, "Sam"}}

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

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

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

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

#include <stdio.h>

struct person 
{
	int age;
	char name[20];
};

int main(void)
{
	struct person people[] = { {23, "Tom"}, {32, "Bob"}, {26, "Alice"}, {41, "Sam"}};
	
	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.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850