Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Структуры против объединений в C: практическое руководство

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

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

Пример: запись студента, хранящая имя, номер зачетки и оценки под одним именем переменной.

Что такое объединение (union)?

Объединение — также пользовательский тип, но все члены разделяют одно и то же пространство памяти. Размер объединения равен размеру его наибольшего члена. Эта особенность делает объединения идеальными для сценариев с ограниченной памятью, где в данный момент нужен только один член.

Объявление структуры

struct Student { char name[60]; int roll_no; float marks; }; 

Обратите внимание на использование ключевого слова struct и точку с запятой после закрывающей скобки.

Пример: Использование структуры

#include <stdio.h> struct Student { char name[60]; int roll_no; float marks; } sdt; int main(void) { printf("Enter the following information:\n"); printf("Student name: "); fgets(sdt.name, sizeof(sdt.name), stdin); printf("Roll number: "); scanf("%d", &sdt.roll_no); printf("Marks: "); scanf("%f", &sdt.marks); printf("\nEntered data:\n"); printf("Name: %s", sdt.name); printf("Roll number: %d\n", sdt.roll_no); printf("Marks: %.1f\n", sdt.marks); return 0; } 

Вывод (пример):

Enter the following information: Student name: James Roll number: 21 Marks: 67 Entered data: Name: James Roll number: 21 Marks: 67.0 

Объявление объединения

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

Пример: Использование объединения

#include <stdio.h> union Item { int x; float y; char ch; }; int main(void) { union Item it; it.x = 12; it.y = 20.2f; it.ch = 'a'; printf("x = %d\n", it.x); printf("y = %f\n", it.y); printf("ch = %c\n", it.ch); return 0; } 

Поскольку все члены разделяют память, установка ch перезаписывает предыдущие значения x и y. Только последнее сохраненное значение валидно.

Структура против объединения

Структуры против объединений в C: практическое руководство

ХарактеристикаСтруктураОбъединение
Ключевое слово объявленияstructunion
Расположение в памятиКаждый член получает свое пространствоВсе члены делят одно пространство
Изменение одного членаНе влияет на остальныеПерезаписывает другие члены
ИнициализацияВсе члены могут быть инициализированы одновременноТолько первый член может быть инициализирован за раз
Общий размерСумма размеров всех членовРазмер наибольшего члена
Типичное применениеХранение связанных данных разных типовХранение одного из нескольких возможных типов
Паттерн доступаЛюбой член доступен в любой моментТолько один член валиден в данный момент
Поддержка гибких массивовПоддерживаетсяНе поддерживается

Когда использовать что

Плюсы и минусы

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

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

Преимущества объединений

Недостатки объединений

Язык C

  1. Асбест против стекловолокна: ключевые различия, применение и безопасность
  2. C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
  3. C# против C++: четкое сравнение особенностей, производительности и сценариев использования
  4. C против C++: ключевые отличия и когда что выбирать
  5. C против Java: подробное сравнение особенностей, истории и применения
  6. strlen() против sizeof() в C: понимание отличий и правильное использование
  7. Python против JavaScript: ключевые отличия, особенности и выбор языка
  8. Двигатели постоянного и переменного тока: ключевые отличия и руководство по выбору
  9. Пайка (бразинг) vs Паяльник (солдеринг): ключевые отличия
  10. Двухтактные vs четырехтактные двигатели: ключевые отличия