C установка IDE C структура програми C змінні C типи даних С функція printf C константи C арифметичні операції C операції порівняння і логічні операції C порозрядні операції C операції присвоювання C перетворення типів C умовні конструкції C цикли С масиви і рядки С функція scanf C препроцесор. Директива #include C #define директива C макроси C умовна компіляція C функції. Визначення та опис функцій C функції. Передача параметрів в функцію C функції. Повернення результату з функції C функції. Рекурсивні функції C область видимості змінних C зовнішні об'єкти C вказівники C вказівник. Операції з вказівниками C покажчики. Арифметика покажчиків C покажчики. Константи і покажчики C покажчики. Покажчики та масиви C покажчики. Масиви покажчиків, рядки і багаторівнева адресація C покажчики. Покажчики в параметрах функції C покажчики. Динамічна пам'ять C покажчики. Покажчик як результат функції C покажчики. Управління динамічної пам'яттю C покажчики. Покажчики на функцію C покажчики. Покажчики на функції як параметри і результати функцій C покажчики. Функції зі змінною кількістю параметрів C struct. Визначення структур C struct. Структури як елементи структур C struct. Покажчики на структури C struct. Масиви структур C struct. Структури і функції C struct. union об'єднання C struct. Бітові поля С file. Введення-виведення і робота з файлами C file. Читання і запис бінарних файлів C file. Читання і запис структур в файл C file. Читання і запис текстових файлів C file. Форматування вводу-виводу C file. Позиціонування в потоці C file. Консольне введення-виведення

C struct. Масиви структур


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

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. Хоча при ініціалізації в масив передається 8 значень {23, "Tom", 32, "Bob", 26, "Alice", 41, "Sam"} , але так як кожна структура складається з двох елементів, то відповідно з цих значень по порядку виходить 4 об'єкти person.

Звернення до елементів масиву структур відбувається за індексом people[0] . А щоб звернутися до елементу структури з масиву, після індексу вказується ім'я елемента структури: people[i].name

Консольний висновок програми:

#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.


Наш партнер:
beta test mp3 playlist downloader