Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

C союз

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

Определение союза

Чтобы определить союз, вы должны использоватьсоюза заявления и определить структуру аналогичным образом.объединение оператор определяет новый тип данных, с множеством членов. Союз формат оператора выглядит следующим образом:

union [union tag]
{
   member definition;
   member definition;
   ...
   member definition;
} [one or more union variables];  

союз тег не является обязательным, каждое определение является членом стандартное определение переменной, такой как INT I, или поплавок п, или другие действительные определения переменных.До конца общего тела определенного конечного точкой с запятой, вы можете указать один или несколько союзных переменных, который является необязательным. Следующее определение общего типа тела под названием Data, есть три члена I, F и ул:

union Data
{
   int i;
   float f;
   char  str[20];
} data;  

Теперь переменная типаданных может хранить целое число, вещественное или строку.Это означает, что переменная (то же самое место в памяти) может хранить множество различных типов данных. Вы можете использовать любые встроенные или определенные пользователем типы данных в едином теле по мере необходимости.

Союз должен быть достаточно памяти для хранения занимают самый большой член профсоюза. Например, в приведенном выше примере, данные будут занимать 20 байт памяти, так как каждый член, пространство, занимаемое строкой является наибольшей. Следующий пример покажет выше союз занимал общий объем памяти:

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   union Data data;        

   printf( "Memory size occupied by data : %d\n", sizeof(data));

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Memory size occupied by data : 20

член профсоюза доступа

Для того , чтобы получить доступ к странам общих членов, мы используемоператор доступа к члену (.).Оператор доступа Пользователь имеет период имена переменных и членов профсоюза нашего союза, чтобы получить доступ между ними. Вы можете использовать ключевое слово для определения переменных типаобъединение профсоюзов.Следующий пример демонстрирует использование союза:

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   union Data data;        

   data.i = 10;
   data.f = 220.5;
   strcpy( data.str, "C Programming");

   printf( "data.i : %d\n", data.i);
   printf( "data.f : %f\n", data.f);
   printf( "data.str : %s\n", data.str);

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

Здесь мы можем увидеть значенияI и Fчленов профсоюза были повреждены, поскольку значения присваиваются переменным последней занимаемой ячейке памяти, которая является причиной членовулк неповрежденной продукции. Теперь давайте посмотрим на один и тот же экземпляр, на этот раз мы используем только одну переменную в то же время, он также демонстрирует основную цель использования союза:

#include <stdio.h>
#include <string.h>
 
union Data
{
   int i;
   float f;
   char  str[20];
};
 
int main( )
{
   union Data data;        

   data.i = 10;
   printf( "data.i : %d\n", data.i);
   
   data.f = 220.5;
   printf( "data.f : %f\n", data.f);
   
   strcpy( data.str, "C Programming");
   printf( "data.str : %s\n", data.str);

   return 0;
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

data.i : 10
data.f : 220.500000
data.str : C Programming

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