Объединение — это очень интересный пользовательский тип данных в языке программирования C. Это очень похоже на структуры в языке программирования C. Однако есть некоторые различия, из-за которых структуры и объединения считаются независимыми типами данных в языке программирования C. Проще говоря, вы можете рассматривать объединение как соединение или объединение различных типов данных в одном контейнере. Это означает, что объединение может содержать переменные, принадлежащие к разным типам данных, в одном и том же контейнере.
Все это обсуждение станет более понятным, когда мы рассмотрим некоторые соответствующие примеры, основанные на использовании объединений в языке программирования C в Linux. Однако, прежде чем поделиться с вами этими примерами, мы хотели бы обсудить работу объединений и структур, чтобы вы могли различать эти два типа данных, прежде чем взглянуть на связанные примеры. Итак, давайте взглянем на прикрепленную часть нашей статьи.
Союзы против структур в C
Все мы знаем, что структура в C — это определяемый пользователем тип данных, который может содержать несколько значений. Эти значения могут соответствовать разным типам данных. То же самое и с союзами в C. Тогда чем же обе структуры и союзы отличаются друг от друга? Что ж, ответ на этот вопрос немного сложнее. Всякий раз, когда вы создаете структуру с более чем одним элементом данных, она выделяет отдельную ячейку памяти для каждого из этих элементов данных. Это означает, что вы можете назначать значения сразу всем элементам данных, и они будут храниться в независимых ячейках памяти.
С другой стороны, в случае объединений в C всякий раз, когда вы создаете объединение с более чем одним элементом данных, оно не выделяет отдельные ячейки памяти для всех элементов данных. Скорее, для всех этих элементов данных зарезервировано единое пространство. Это означает, что независимо от того, сколько элементов данных разных типов данных содержится в объединении, он может хранить только один тип данных.
Примеры союзов в C
Теперь, когда вы знаете разницу между структурой и объединением, самое время поделиться некоторыми примерами объединений в C, чтобы наглядно представить суть этой концепции. Мы разработали следующие примеры, чтобы показать неправильное использование объединений в C с последующим его правильным использованием, чтобы хорошо понять эту концепцию. Давайте посмотрим на оба этих примера.
Пример # 1: неправильное использование объединений в C
В первом примере сегодняшней статьи мы написали программу на языке C в файле с именем Unions.c. В этой программе мы создали объединение, объявленное с помощью ключевого слова union, за которым следует имя объединения, которым в нашем случае является «SampleUnion». Также в теле этого объединения у нас есть три члена данных, принадлежащих к разным типам данных, а именно «int», «float» и «char []». После создания объединения у нас есть функция main (). В этой функции мы сначала создали объект объединения, который создается сначала с использованием ключевого слова union, за которым следует имя объединения, то есть «SampleUnion» в нашем случае, а затем имя объект, который мы выбрали в качестве «СУ». После создания этого объекта мы присвоили значения элементам данных нашего объединения с помощью этого объекта.
Компиляция программы C:
Вы можете легко скомпилировать созданную выше программу C с помощью команды, показанной ниже:
$ gcc Unions.c –o Unions
Безошибочная компиляция вашего кода C будет означать, что вы можете приступить к выполнению своего кода.
Выполнение программы C:
Чтобы выполнить вашу программу на C в Linux, вам нужно будет получить доступ к ее объектному файлу, созданному выше, следующим образом:
$ ./Unions
Результат нашей программы на C, созданной выше, показан ниже. Однако вы можете ясно заметить из этого вывода, что значения членов данных «int» и «float» нашего объединения были повреждены, так как они были перезаписаны нашим членом данных «char []». Это означает, что мы неправильно использовали наше объединение, одновременно присвоив разные значения элементам данных объединения, которые объединение не может обработать.
Пример # 2: правильное использование объединений в C
Теперь давайте посмотрим на исправленную версию нашего кода объединения, который мы создали выше. Эта версия показана на прилагаемом ниже изображении. Единственное отличие состоит в том, что на этот раз мы печатаем значения всех элементов данных по одному, то есть сразу после присвоения им значений, чтобы получить их фактические значения на выходе вместо перезаписанных поврежденных значений.
Методы компиляции и выполнения программы C в Linux уже были описаны в первом примере. Следовательно, на этот раз, когда ваша программа C будет выполнена, вы сможете получить правильные выходные значения для всех элементов данных, как показано на изображении ниже. На этот раз мы правильно использовали объединения в C, присваивая одно значение члену данных за раз.
Заключение
Надеюсь, эта статья дает хорошее представление о концепции объединений в C. Изучая различные примеры, которыми мы поделились сегодня, вы будете эффективно работать с объединениями в C правильно.