Для обращения к отдельным элементам структуры можно использовать "точку" — операцию обращения к члену структуры (.). Синтаксис операции:
stname.mname
В этой записи stname является переменной, связанной со структурным типом, a mname — это имя любой переменной-члена структуры.
Пример: записать информацию в элемент sunodel при помощи следующего оператора:
gets(stused_boat.szmodel) ;
В этом операторе stused_boat — имя структуры, a synodel — переменная-член структуры. Аналогичным образом для печати элемента структуры можно использовать функцию printf():
printf ("%ld", stused_boat. lmotor_hours) ;
Доступ к элементам структуры в C++ по сути такой же:
cin » stused boat. sztype;
Этот оператор выполняет считывание типа катера stused_boat в символьный массив; следующий оператор выводит на экран продажную стоимость
stused_boat. cout « stused_boat.fsaleprice;
Элементы структуры обрабатываются так же, как и любые другие переменные С или C++; необходимо только всегда использовать операцию "точка".
В С и C++ имеется возможность доступа к отдельным разрядам (битам) в некотором более крупном типе данных, например, в байте. Это полезно, например, для изменения масок, используемых для системных целей и графики. Возможность доступа к разрядам строится на основе структур С и C++.
Рассмотрим для примера информацию, необходимую для изменения регистра статуса клавиатуры компьютера. Этот регистр в компьютерах IBM содержит следующую информацию:
биты регистра
Статус клавиатуры: 76543210
Порт (417h)
Где
bit0 = RIGHT SHIFT не нажат (1)
bit1 = LEFT SHIFT не нажат (1)
bit2 = CTRL не нажат (1)
bit3 = ALT не нажат (1)
bit4 = SCROLL LOCK активен (1)
bit5 = NUM LOCK активен (1)
bit6 = CAPS LOCK активен (1)
bit7 = INS активен' (1)
Для доступа и управления этими данными можно создать структуру следующего вида:
struct stkeybits {
unsigned char
ucrshift : 1, /* младший разряд */
uclshift : 1,
ucctrl : 1,
ucalt : I,
ucscroll : I,
ucnumlock : I,
uccapiock : I,
ucinsert : 1; /* старший разряд */
} stkey_register;
Биты в структуре начинаются с младшего и заканчиваются старшим. Можно указывать несколько битов, задавая их количество (вместо 1). В битовых полях можно использовать только целочисленные типы.
Обращение к элементам структуры битовых полей выполняется как обычно.
Объединение — еще один тип данных, который можно использовать различными способами. К примеру, некоторое объединение может рассматриваться как целое значение при выполнении одной операции и как число с плавающей точкой или двойной точности — при выполнении другой. По виду объединения напоминают структуры; однако, они сильно отличаются. Объединение, так же как и структура, может содержать несколько различных типов данных. Однако в объединении эти данные занимают одну и ту же область памяти. В отдельный момент времени объединение может хранить информацию только об одном типе данных. Во многих других языках высокого уровня данное языковое средство называется "записью с вариантами" (variant record).