Распределение памяти

Объединения

Битовые поля структур (bit-fields)

Использование в качестве члена указателя на ту же структуру

struct mystruct {

int a;

int b;

mystruct *p;

}

Используется для построения связных списков


12 Объявление переменных типа структур в С и С++

 

Объявление структуры одинаково для С и С++

struct mystruct {

int a;

int b;

}

 

Задание структурных переменных
C C++
struct mystruct prim mystruct prim
Ключевое слово struct - обязательно Ключевое слово struct - отсутствует

 

Назначение битовых полей
1. Для хранения нескольких логических переменных в одном байте, что экономит память
2. Для приема информации внешних устройств, закодированных в битах
3. Для подпрограмм кодирования, которым требуется доступ к отдельному биту в рамках байта

 

a) Общий формат определения битовых полей

struct имя_типа_структуры {

тип имя1:длина;

тип имя2:длина;

. . .

тип имяN:длина;

} имена_структурных_переменных;

 

Длина структуры всегда кратна 8 Тип поля обычно unsigned

 

б) Пример структуры, содержащей одно битовое поле

struct onebit{

unsigned field1:1;

} inform;

 

в) Пример структуры, определяющей состояние порта

struct status {

unsigned field1:1;

unsigned field2:1;

unsigned field3:1;

unsigned field4:1;

unsigned field5:1;

unsigned field6:1;

unsigned field7:1;

unsigned field8:1;

}inform1;

 

г) В структуре можно пропускать поля

struct status1 {

unsigned:5; // пять битов не интересуют; имя поля можно не

//использовать

unsigned field6:1;

unsigned field7:1;// последний бит не интересует, поэтому поле не

//определяется

}inform2;

 

Обращение к полю:

inform2.field6=0;

 


д) В структуре можно смешивать “обычные” члены с битовыми полями

 

struct stud1 {

AnsiString name;

int grup; // номер группы

addr address; // в качестве члена структуры используется вложенная

// структура

unsigned work:1; // признак вечернее отделение или дневное

}student; // переменная типа stud

 

 

· Объединение состоит из нескольких переменных, которые разделяют одну и ту же область памяти · Объявление объединения начинается с ключевого слова union · При объявлении объединения компилятор автоматически выделяет область памяти, достаточную для хранения в объединении переменных самого большого по объему типа  

 

union myunion { // объявление объединения не задает переменной и

short int i; // не выделяет памяти

char ch;

}u_var; // имя переменной (память выделяется)


 

Переменная Число байт
i
ch

 

 

 

сh

 

i

 

Обращение к элементу объединения:

u_var.ch=’N’;

Для объединений разрешена операция ->, если обращение к объединению производится с помощью указателя.