Разница между структурой и объединением в 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 для начинающих: Кликните сюда