MyTetra Share
Делитесь знаниями!
Структуры в языке Си. Массивы структур
Время создания: 30.03.2023 15:35
Текстовые метки: язык, Си, C, структура, struct, массив
Раздел: Компьютер - Программирование - Язык C (Си)
Запись: xintrea/mytetra_syncro/master/base/1680179753uascznc8dx/text.html на raw.github.com

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



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.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования