Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры оп.docx
Скачиваний:
4
Добавлен:
25.09.2019
Размер:
116.07 Кб
Скачать
  1. Массивы структур

Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Например, для объявления 100-элементного массива структур типа addr, которая была ранее определена в данной лекции, следует написать:

struct addr addr_info[100];

Для доступа к отдельным структурам массива addr_info следует проиндексировать имя массива. Например, для вывода содержимого поля zip третьей структуры, следует написать:

printf(“%ld”, addr_info[2].zip);

Как и массивы переменных, массивы структур индексируются с 0.

  1. Указатели на структуры

Указатели на структуры объявляются с помощью символа *,стоящего перед именем экземпляра структуры. Например, указатель addr_pointer на структуру addr объявляется так:

struct addr *addr_pointer;

Для того чтобы определить адрес структуры, достаточно поместить перед ее именем оператор &. Рассмотрим пример:

struct bal{

float balance;

char name[80];

}person;

struct bal *p; /создаем указатель на структуру/

p=&person; /присваиваем указателю p адрес структуры person/

Для доступа к членам структуры с помощью указателя на структуру следует использовать оператор «стрелка» ->.

p->balance /ссылка на поле баланс/

  1. Битовые поля

Если ограничено место для хранения информации, можно сохранить несколько переменных в одном байте.

Некоторые интерфейсы устройств передают информацию, закодировав биты в один байт.

Некоторым процедурам кодирования необходимо получить доступ к отдельным битам в байте.

Стандартный вид объявления битовых полей следующий:

struct имя структуры {

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

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

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

Пример

struct device {

unsigned active : 1;

unsigned ready : 1;

unsigned xmt_error : 1;

} dev_code;

Битовые поля имеют некоторые ограничения. Нельзя получить адрес переменной битового поля. Переменные битового поля не могут помещаться в массив. Переходя с компьютера на компьютер, нельзя быть уверенным в порядке следования бит (слева направо или справа налево). Любой код, использующий битовые поля, зависит от компьютера.

  1. Объединения

Объединение- область памяти, которая используется для хранения переменных разных типов. Объединение позволяет интерпретировать один и тот же набор битов по-разному. Общий вид объявления объединения:

union имя_типа_объединения

{

тип имя_члена;

тип имя_члена;

.

}имена_экземпляров_объединения;

Например:

union union_type{

int i;

char ch[4];

};

  1. Перечисления

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

enum ярлык {список перечислений} список переменных;

enum coin{ penny, nickel, dime, quarter, half_dollar, dollar};

coin money;

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

printf(“The value of quarter is %d “, quarter);

Если явно не проводить инициализацию, значение первого имени перечисления будет 0, второго 1 и т.д.

Можно определить значение одного или нескольких символов, использую инициализатор. Это делается путём помещения за символом знака равенства и целочисленного значения. При использовании инициализатора, имена, следующие за инициализированным, получают значение большее на 1, чем указанное перед этим.

enum coin{ penny, nickel, dime, quarter=100,

half_dollar, dollar};

Теперь имена получат следующие значения:

penny 0

nickel 1

dime 2

quarter 100

half_dollar 101

dollar 102