Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

[Информатика] Лекции 3-7

.pdf
Скачиваний:
12
Добавлен:
21.03.2016
Размер:
3.52 Mб
Скачать

+

Определение структуры

struct имя_структурного_типа { определения_элементов;

}список описателей;

аналогично:

struct student{

struct student{

char name[15];

char name[15];

char surname[20];

char surname[20];

int year;

int year;

} student_1, *student_2;

};

 

struct student student_1, *student_2;

+

Операции выбора

Экземпляр-структура

struct student student_1;

доступ к полю (операция выбора) :

точка(.)

int grad_year=student_1.year;

Экземпляр-указатель

struct student *student_2;

доступ к полю (операция выбора) :

минус+больше(->)

int grad_year=student_2->year;

+

Размер структуры

равен сумме размеров ее полей?

struct Foo1

 

{

struct Foo2

char ch;

 

int value;

{

};

char ch;

 

short id; int value;

};

sizeof(Foo1) ? sizeof(Foo2)

+ Выравнивание полей в памяти

1 байт: ch

2байт: пусто

3байт: пусто

4байт: пусто

5байт: value[0]

6байт: value[1]

7байт: value[2]

8байт: value[3]

1 байт: ch

2байт: пусто

3 байт: id[0]

4 байт: id[1]

5 байт: value[0]

6 байт: value[1]

7 байт: value[2]

8 байт: value[3]

+ Отказ от выравнивания полей

#pragma pack(push, 1) struct Foo

{

// ...

};

#pragma pack(pop)

+можно использовать битовые поля!

+

Объединения

DEF: структура, все элементы которой имеют нулевое смещение относительно ее начала, размер которой равен размеру наибольшего из ее элементов

union {

определения_элементов; } обозначение_объединяющего_типа;

Пример:

union {

1 Подключаем bios.h

char a[2];

2 unni.b=bioskey(0);

short b;

3 unsigned char asc=unni.a[0];

} unni;

4 unsigned char scn=unni.a[1];

+

Битовые поля

1.Вывести на экран побитовое содержимое байта

2.Упаковать 2 целых числа в 1 байт (перевод из 10 в 16 систему счисления)

+

Структуры и массивы

struct goods list[max_goods], *plist;

 

 

 

 

 

 

 

a)

list[2].name

 

 

g) (*plist).name[2]

 

b)

list[2].name[1]

 

 

 

 

c)

list.name[2]

 

 

d)

plist.name[2]

 

e)list -> name[2]

f)plist->name[2]

Лекция 7 Информатика

Динамические структуры данных, списки, деревья, очередь

49

+ Динамический двумерный массив

50