[Информатика] Лекции 3-7
.pdf+
Определение структуры
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