Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

Объединения ( union ) | Перечислимый тип данных ( enum )

   Объединения( union )

Объединение - это тоже пользовательский тип данных, который очень похож на структуру. Только тут все данные объединения занимают одну и туже область в памяти. Т.е. на каком-то этапе вам нужен один тип данных, на другом - другой. В общем, объединение экономит вашу память от ненужных на данном этапе переменных.

Так как объединение хранит и использует всегда одно поле их множества на выбор, то возникает вопрос о выделении памяти под это поле. Тут принцип понятный - выбирается наибольший из типов данных.

объявление

Все то же самое, как и объявление структуры, только вместо специального слова struct используется union. Вот пример:

union chislo {
   int a;
   float b;
};

Разрешенные операции:

  1. можно присваивать объединения друг другу
  2. адрес брать так же ни кто не запрещал
  3. к элементам можно получить доступ, так же как и в структурах, т.е. через (.) или (->)

Объединение ( union ) можно инициализировать только один значением, причем оно должно соответствовать первому элементу этого объединения. В нашем случае:

union chislo A = {34 }; // пойдет
union chislo B = {34.56 }; // нельзя

У нас первым элементом расположено поле int, поэтому при инициализации так же должно быть поле int.

   Перечислимый тип данных ( enum )

В языке Си существует еще один пользовательский тип данных - перечислимое. Для того, что бы объявить перечислимый тип данных, необходимо написать специальное слово: enum, далее пишется имя нашего перечисляемого типа данных и все его значения, которые мы сами напишем. Вот примеры:

enum bool { 0 ,1 };
enum names {"Sergey", "Andrey", "Victor"};

Неслучайно подтема называется: перечислимый тип данных (enum), так как наши перечислимые и являются значениями, которые мы не можем менять. Список всех значений принято называть перечисляемым списком

Так как перечислимые по своей сути являются константами, то советую писать имена перечислимых в верхнем регистре.

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

В конце урока давайте все же пойме для чего нам нужно создавать пользовательские типы? Ответ кроется всего-навсего в удобстве. Вот их преимущества:

  1. экономия кода
  2. легче написать структуру из трех переменных, и потом только инициализировать одну переменную, чем каждый раз писать по три переменных с их инициализацией.

  3. удобство понимания кода
  4. структура дает логическое обоснование созданной переменной, что гораздо облегчает понимание кода

  5. легкость в обращении
  6. и передачу в функцию, и запись в файл - все это становится в разы проще и понятнее.

Предвидущие уроки:

  1. Инициализация структуры
  2. Доступ к элементам структуры | typedef struct
При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru