Складні типи даних в сі

Складні типи даних в сі

Структура - це об'єднання кількох об'єктів, можливо, різного типу під одним ім'ям, яке є типом структури. Як об'єкти можуть виступати змінні, масиви, покажчики та інші структури.

Структури дозволяють трактувати групу пов'язаних між собою об'єктів не як безліч окремих елементів, а як єдине ціле. Структура являє собою складний тип даних, складений з простих типів.

int day; // 4 байта

char * month; // 4 байта

int year; // 4 байта
>;

Поля структури розташовуються в пам'яті в тому порядку, в якому вони оголошені:

У зазначеному прикладі структура date займає в пам'яті 12 байт. Крім того, покажчик * month при ініціалізації буде початком текстового рядка з назвою місяця, розміщеної в пам'яті.

char lastname [20]; // прізвище

char firstname [20]; // ім'я

struct date bd; // дата народження
>;

Ініціалізація полів структури

Ініціалізація полів структури може здійснюватися двома способами:

У першому способі ініціалізація здійснюється за такою формою:

Ім'я елемента структури є складовим. Для звернення до елемента структури потрібно вказати ім'я структури і ім'я самого елемента. Вони розділяються крапкою:

printf ( ".% s.", bd.day, bd.month, bd.year);

Другий спосіб ініціалізації об'єктів мови Сі з використанням функцій вводу-виводу.

#include
#include
struct date

бітові поля

Використовуючи структури, можна упакувати цілочисельні компоненти ще більш щільно, ніж це було зроблено з використанням масиву.

Набір розрядів цілого числа можна розбити на бітові поля, кожне з яких виділяється для певної змінної. При роботі з бітовими полями кількість бітів, що виділяється для зберігання кожного поля відокремлюється від імені двокрапкою

тип ім'я: КолічествоБіт

При роботі з бітовими полями потрібно уважно стежити за тим, щоб значення змінної не вимагало пам'яті більше, ніж під неї виділено.

Приклад Розробити програму, що здійснює упаковку дати в формат

#include
#include
#define YEAR0 1980
struct date

unsigned short day: 5;

unsigned short month: 4;

unsigned short year: 7;
>;
int main ()

struct date today;

Покажчики на структури

Для організації роботи з масивом можна використовувати покажчик р або ім'я масиву:
вираженіе-> ідентифікатор
(* Вираз) .ідентіфікатор

вираз - покажчик на структуру або об'єднання;
ідентифікатор - поле структури або об'єднання;

Динамічне виділення пам'яті для структур

Динамічно виділяти пам'ять під масив структур необхідно в тому випадку, якщо заздалегідь невідомий розмір масиву. Для визначення розміру структури в байтах використовується операція

sizeof (ім'я структури);

Приклад Бібліотека з 3 книг

#include
#include

#include
struct book

Схожі статті