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

Объединения в C: определение, использование и сравнение со структурами

Объединения в C: объяснение

Научитесь определять, создавать и обращаться к объединениям в C, и узнайте, почему они отличаются от структур в организации памяти и применении.

Объединение (union) — это пользовательский тип в C, который, в отличие от структуры, может хранить только одно из своих значений-членов в данный момент. Это делает объединения идеальными для памяти-эффективных представлений данных и type-punning в низкоуровневом программировании.


Определение объединения

Используйте ключевое слово union для объявления нового типа. Например:

union Car {
    char name[50];
    int price;
};

Приведенный выше код создает производный тип union Car, который может хранить либо строку из 50 символов, либо целое число цены.


Создание переменных объединения

Определение объединения не выделяет память. Чтобы его использовать, объявите переменные этого типа:

union Car car1, car2, *car3;

Также можно объединить определение и объявление переменных:

union Car {
    char name[50];
    int price;
} car1, car2, *car3;

В обоих примерах car1 и car2 — экземпляры объединения, а car3 — указатель на объединение.


Доступ к членам объединения

Используйте оператор точки (.) для прямого доступа и стрелку (->) для доступа через указатель:


Объединения против структур

В то время как структуры выделяют достаточно места для всех членов, размер объединения равен размеру его наибольшего члена. Рассмотрим сравнение:

#include <stdio.h>
union UnionJob {
    char name[32];
    float salary;
    int workerNo;
} uJob;
struct StructJob {
    char name[32];
    float salary;
    int workerNo;
} sJob;
int main() {
    printf("size of union = %zu bytes\n", sizeof(uJob));
    printf("size of structure = %zu bytes", sizeof(sJob));
    return 0;
}

Вывод:

size of union = 32
size of structure = 40

Здесь структура занимает 40 байт (32 + 4 + 4), а объединение — только 32 байта — размер своего наибольшего члена name[32]. Все члены объединения разделяют одну и ту же область памяти.


Практический пример: Перезапись членов

#include <stdio.h>
union Job {
    float salary;
    int workerNo;
} j;
int main() {
    j.salary = 12.3;
    j.workerNo = 100; // перезаписывает предыдущее значение
    printf("Salary = %.1f\n", j.salary);
    printf("Number of workers = %d", j.workerNo);
    return 0;
}

Вывод:

Salary = 0.0
Number of workers = 100

Поскольку salary и workerNo разделяют одну память, запись в одно стирает другое.


Для изучения реальных сценариев использования прочитайте Why do we need C Unions?.

Язык C

  1. Перечисления (Enums) в Java: полное руководство по enum и enum-классам
  2. Конструкторы в Java Enums: объяснение с практическим примером
  3. Объединения в C (union): эффективное использование памяти для разных типов данных
  4. Мастерство подбора пневматических клапанов: практическое руководство
  5. Рынок ИИ в производстве достигнет $4,8 млрд к 2026 году, темп роста 28,1% в год
  6. Профессиональное руководство по безопасному и точному раскрою алюминиевого прутка
  7. Трубные муфты (pipe unions): определение, применение и преимущества
  8. Расчёт мощности коммерческого кондиционера: методика и пример
  9. Выбор размера токарного станка для оружейного дела: полное руководство
  10. Выбор правильного размера воздушного ресивера: оптимизация производительности и эффективности