Как обращаться к элементам массива структур - C (СИ)
Формулировка задачи:
Допустим, что у меня есть структура default, имеющая под собой некоторое количество элементов типа char по имени number, и есть ссылка на след. элемент ptr:
...
Допустим, есть функция, которая использует эту структуру, есть главная функция, которая их вызывает, есть просто обращения к элементам данной структуры с целью выполнить некую операцию, скажем, strcmp.
Я знаю, как представить все эти задумки в стандартном обращении, без адресации элементов, то биш, использования списков.
struct default {number[];
ptr;
};Мои вопросы к вам, Дамы и Господа
: 1) Как обращаться к элементам массива структур (к примеру, struct default fix[...]), который, скажем, содержит не один элемент, а 10? 2) Как осуществить обращение к этим элементам, если бы эта структура была списком? 3) Как работать с функциями в списках на примере данной структуры? Большая просьба, Товарищи программисты, помочь мне ПОНЯТЬ ) Заранее спасибо ) Благодарность гарантирую ; )Решение задачи: «Как обращаться к элементам массива структур»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef struct defOlt{
int sotka_voTki;
int *shashka;
};
const int zakus = 10;
int main ()
{
struct defOlt batl[zakus];
for (int i = 0; i < zakus; ++i){
batl[ i ].sotka_voTki = i;
batl[ i ].shashka = malloc((i + 1) * sizeof(int));
if ( !batl[ i ].shashka ){
puts("кровушка у дам, господ и бомжей одного цвета и течет одинаково");
exit ( -1 );
}
for (int k = 0; k < i + 1; ++k)
batl[ i ].shashka[ k ] = k;
}
for (int i = 0; i < zakus; ++i)
free(batl[ i ].shashka);
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру с названием
defOltи двумя полями:sotka_voTkiтипа int иshashkaтипа int* - Инициализируем константу
zakusзначением 10 - Создаем массив структур
batlтипаdefOltс размеромzakus - В цикле for, начиная с 0 и до
zakusвключительно, присваиваем полюsotka_voTkiзначениеi, а полюshashkaвыделяем память под массив int с размеромi + 1 - Если память не выделена успешно, выводим сообщение и завершаем программу с кодом -1
- В цикле for, начиная с 0 и до
i + 1включительно, заполняем элементы массиваshashkaзначениями от 0 доi - В цикле for, начиная с 0 и до
zakusвключительно, освобождаем память, выделенную под каждый массивshashka - Завершаем программу с кодом 0