Разница между структурой и объединением в C

Что такое структура?

Структура — это определяемый пользователем тип данных на языке программирования C, который объединяет логически связанные элементы данных разных типов.

Все элементы структуры хранятся в смежных ячейках памяти. Переменная структурного типа может хранить более одного элемента данных разных типов под одним именем.

Что такое Союз

Union — это определяемый пользователем тип данных, как и структура. Union объединяет объекты разных типов и размеров вместе. Переменная объединения выделяет пространство памяти, равное пространству для хранения наибольшей переменной объединения. Это позволяет различным типам объектов находиться в одном и том же месте.

Синтаксис объявления структуры

struct [name of the structure]
   {
       type member1;
       type member2;
       type member3;
   };

Структура объявляется с использованием ключевого слова «struct» и имени структуры. Номер 1, номер 2, номер 3 являются отдельными членами структуры. Часть тела заканчивается точкой с запятой (;).

Пример структуры в программировании на C

#include <stdio.h>
struct student {
    char name[60];
    int roll_no;
    float marks;
} sdt;
int main() {
    printf("Enter the following information:\n");
    printf("Enter student name: ");
    fgets(sdt.name, sizeof(sdt.name), stdin);
    printf("Enter student roll number: ");
    scanf("%d", & sdt. roll_no);
    printf("Enter students marks: ");
    scanf("%f", & sdt.marks);
    printf("The information you have entered is: \n");
    printf("Student name: ");
    printf("%s", sdt.name);
    printf("Student roll number: %d\n", sdt. roll_no);
    printf("Student marks: %.1f\n", sdt.marks);
    return 0;
}

В приведенной выше программе создана структура под названием «студент». Эта структура имеет три элемента данных: 1) имя (строка), 2)roll_no (целое число) и 3) метки (с плавающей запятой).

После этого создается структурная переменная sdt для хранения информации об ученике и ее отображения на экране компьютера.

Вывод:

Введите следующую информацию:

Введите имя ученика: Джеймс

Введите номер студента: 21

Введите оценки учащихся: 67

Введенная вами информация:

Имя ученика: Джон

Номер студента: 21

Оценки учащихся: 67.0

Синтаксис объявления Union

union [name of union]
    {
       type member1;
       type member2;
       type member3;
    };

Союз объявляется с использованием ключевого слова «union» и имени союза. Номер 1, номер 2, номер 3 являются индивидуальными членами союза. Часть тела заканчивается точкой с запятой (;).

Пример объединения в программировании на C

#include <stdio.h>

union item
{
    int x;
    float y;
    char ch;
};

int main( )
{
    union item it;
    it.x = 12;
    it.y = 20.2;
    it.ch = 'a';
    
    printf("%d\n", it.x);
    printf("%f\n", it.y);
    printf("%c\n", it.ch);
    
    return 0;
}

Вывод:

1101109601

20.199892

a

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

Следовательно, единственный элемент данных, значение которого сохранено в данный момент, будет занимать пространство памяти. Значение переменной ch было наконец сохранено, поэтому значение остальной части переменные потерян.

Структура против. Союз

Структура против. Союз
Структура против. Союз

Вот важное различие между структурой и объединением:

Структура: Союз
Вы можете использовать ключевое слово struct для определения структуры. Вы можете использовать ключевое слово объединения, чтобы определить объединение.
Каждому члену структуры назначается уникальное место в памяти. В объединении ячейка памяти используется всеми элементами данных.
Изменение значения одного элемента данных не повлияет на другие элементы данных в структуре. Изменение значения одного элемента данных приведет к изменению значения других членов данных в объединении.
Это позволяет инициализировать несколько членов одновременно. Это позволяет вам инициализировать только первого члена объединения.
Общий размер структуры представляет собой сумму размеров каждого элемента данных. Общий размер объединения равен размеру самого большого элемента данных.
В основном он используется для хранения различных типов данных. В основном он используется для хранения одного из многих доступных типов данных.
Он занимает место для каждого члена, записанного во внутренних параметрах. Он занимает место для элемента, имеющего наибольший размер, записанный во внутренних параметрах.
Вы можете получить любого участника одновременно. Вы можете получить доступ к одному члену союза одновременно.
Он поддерживает гибкий массив. Он не поддерживает гибкий массив.

Преимущества структуры

Вот плюсы/преимущества использования структуры:

  • Структуры собирают более одного фрагмента данных об одном и том же предмете в одном и том же месте.
  • Это полезно, если вы хотите собрать данные схожих типов и параметров, таких как имя, фамилия и т. д.
  • Его очень легко поддерживать, поскольку мы можем представить всю запись, используя одно имя.
  • По структуре мы можем передать полный набор записей любой функции, используя один параметр.
  • Вы можете использовать массив структуры для хранения большего количества записей схожих типов.

Преимущества союза

Вот плюсы/преимущества использования объединения:

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

Недостатки структуры

Вот минусы/недостатки использования структуры:

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

Минусы союза

Вот минусы/недостатки использования объединения:

  • Одновременно вы можете использовать только одного члена союза.
  • Все переменные объединения не могут быть инициализированы или использоваться с разными значениями одновременно.
  • Союз выделяет одно общее место хранения для всех своих членов.

КЛЮЧЕВЫЕ ОТЛИЧИЯ:

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

Также ознакомьтесь с нашим руководством по C для начинающих: Кликните сюда