Структуры в C . Частина 2

Структуры в C . Частина 2
5 (100%) 1 голосування





структури з ++, структури c ++, структура C ++. вкладені структури

Со структурами C мы предварительно познакомились в предыдущей статье. Продолжаем знакомство.

Определение структури бажано розташовувати за межами main() функции. Тогда работать с ней смогут и другие определенные программистом функции, как показано в нашем примере из первой части. Такое объявление называют внешним.

Инициализация. Елементи структури можна форматувати відразу при оголошенні об'єкту.

Объявляем объект volume1 в строке 13 и проводим его инициализацию. Схоже на ініціалізацію елементів масиву – в фигурных скобках и через запятую. Эти данные запишутся в соответствующие элементы структуры по порядку. В каком порядке определены элементы в структуре – в таком и произойдет запись значений. Операцію одно можна не використовувати (согласно C 11).

Рассмотрим такую инициализацию на примере с более сложной структурой WonderfulWoman :

структури з ++, структури c ++, структура C ++. вкладені структури

Об'єкт цієї структури можна форматувати так:

структури з ++, структури c ++, структура C ++. вкладені структури

Але якщо структура містить більше двох-трьох елементів -Бажано так не робити. Это немного запутывает и усложняет читаемость и понимание программы.

Объявление объектов. Создать объект структуры можно сразу во время её определения. Для цього необхідно дати ім'я об'єкту між крапкою з комою і закриває фігурної дужки:

В С есть возможность определить структуру без дескриптора (без имени типа):

В таком случае надо обязательно объявлять объекты в определении структуры. В главной функции вы уже не сможете создать другие объекты этой структуры, так как дескриптора нет. Цей прийом є сенс застосовувати, если объектов структуры будет очень мало – 1 или 2.

Присваивание (=) для структур. Для объектов одной структуры можно применить операцию присваивания = . Операция присвоит элементам одного объекта значения элементов второго объекта.

Это так называемое поэлементное или почленное присваивание. На экране:

структури з ++, структури c ++, структура C ++. вкладені структури

Сработало – всі елементи об'єкта структури volume2 стали рівні елементів об'єкта volume1.

Пам'ять займана структурою. Рассмотрим пример: використовуючи оператор sizeof, узнаем сколько памяти занимает каждый элемент структуры в отдельности. Порахуємо загальний обсяг пам'яті елементів. потім застосуємо sizeof к объекту структуры и увидим, що розміри не співпадають.

На экране:

структури з ++, структури c ++, структура C ++. вкладені структури

sizeof показал нам сколько памяти занимает каждый элемент структуры HandsomeMan. Мы эти значения суммировали и получили 25. То есть по идее структура должна занимать 25 байт оперативной памяти. Но когда мы применяем оператор sizeof до структури – получаем значение 28.

Размер объекта структуры не всегда равен сумме размеров его элементов. Так трапляється через вирівнювання елементів різної довжини. Тому в структурі можуть зустрічатися безіменні ділянки пам'яті. Если вам надо знать сколько в действительности занимает структура в памяти – отримано sizeof , как в примере.

Это видео из предыдущего урока. Кто не смотрел – уделите время




Мы узнали как определять структуры, как объявлять и инициализировать их объекты. Якщо нам знадобиться створити більше ніж 2-3 об'єкта структури, тогда лучше создать массив структур. Эту тему рассмотрим в следующей статье.

Щоб підтримати наш сайт – натисніть на скарбничку і виберіть будь-який зручний спосіб.

Нові уроки з програмування:

4 думки про "Структуры в C . Частина 2

  1. дивно, але з ім'ям в структурі біда, а точніше коли вводиш
    обсяг = { “имя”, і т.д ;

  2. Дан масив, в якому зберігаються дані про розклад поїздів на сього-
    дняшній день: номер поїзда, назва (т.е. звідки куди, например, новий-
    Російсько-Москва), час прибуття на станцію і час відправлення (годинник,
    хвилини). За даним часу визначити, які з поїздів стоять зараз на
    станції.

залишити коментар

Код розміщуйте в тегах: <pre class="lang:C ++ декодуванням:true ">ВАШ КОД</заздалегідь>