Асоциация, програмиране С и С

съюза union_type Int I; овъгляване СН;
>;

съюз union_type cnvt;

В cnvt като цяло число аз, и гл характер заемат едно и също място на паметта. (Разбира се, че е 2 или 4 байта, CH - само 1.) Фигурата показва как СН I и споделят едно място в паметта (като се приема наличието на 16-битови цели числа). Можете да получите достъп до данните, съхранявани в CNVT, като цяло число, както и символа.

Фигура: Използване на променливите I и cnvt, (размера на променлива цяло число се приема за 16 бита)

Когато обявиха обединението, компилаторът автоматично създава достатъчно голяма променлива да държи най-голямата променлива, която се намира в басейна.

За да получите достъп до членове на асоциации, използвани синтаксис, използван за достъп структури - с помощта на операторите "точка" и "стрелка". За да работите директно с него съюз, е необходимо да се използва оператора "точка". Ако лечението с променлива комбинация се осъществява с помощта на показалеца, е необходимо да се използва оператора "стрела". Например, за определяне на цяло число и комбиниране елемент 10 трябва да напише cnvt:

Използването на асоциации помага да се създаде (преносими) код на машинно-независими. Тъй като съставител следи реалните измерения на променливите, които съставляват съюз, намаляване на зависимостта от компютъра. Няма нужда да се притеснявате за размера на цяло число или реални числа, знаци, или нещо друго.

Обединяване често се използва, когато е необходимо конвертиране на типове, тъй като е възможно да се получи достъп до данни, съхранявани в басейна, доста различни начини. Да разгледаме проблема за запис на цялото число във файла. Въпреки че е възможно да се напише всякакъв тип данни (включително) файл с помощта на неуспешно а (), за работа неуспешно на (), че е твърде "мазнини". Използването на комбинацията, можете лесно да се създаде функция, запис байт двоичното представяне на даден файл. Въпреки че има няколко начина за създаване на тази функция, има един начин да направите това чрез комбиниране. В този пример се допуска да се използват 16-битови цели числа. Асоциацията се състои от едно цяло и две байт характер масив:

Сливането позволява достъп до два байта, които са единица като отделни знаци. Сега можете да използвате, за да създадете PW write_int () функция, показани в следната програма:

#include
#include
съюз PW междинно съединение I;
овъгляване гл [2];
>;

вътр write_int (инт бр, FILE * FP);

INT главната ()
FILE * РП;
FP = fopen ( "test.tmp", "т +");

ако (FP == NULL) ФОРМАТ ( "Не мога да отворя файл \ н.");
изход (1);
>

write_int (1000, FP);
fclose (FP);
връщане 0;
>

/ * Изход на цялата чрез комбиниране * /

Int write_int (междинно бр, FILE * FP) съюз PW WRD;
wrd.i = бр;
поставя (wrd.ch [0], FP); / * A сключване на първата половина на * /
върне putc (wrd.ch [1], FP); / * Изход на втората половина на * /
>

Въпреки write_int () се нарича с цялото, тя използва асоциацията за записване на двете половини от цялото към файл на диска байт по байт.