Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прилож В2 Описание языка С ч 2.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
382.46 Кб
Скачать

8.2 Инициализация структур

Одновременно с описанием переменных в виде структур, можно задавать полям (элементам) структур начальные значения:

TProd zp={“Компьютер P-IV 3000 MHz”, 2117, 3150.0, 5};

TProd mzp[5]={ {“Холодильник Nord 2910”,1521, 2130.0, 12},

{"Телевизор LG 21FX4RG”, 3462, 1175.0, 10},

.......

};

8.3 Работа с элементами структур

Для выделения из структуры отдельного элемента используется форма записи:

перем . имя_поля

где перем – это имя переменной, имеющей вид структуры (способы 1-3)

. - операция выделения из структуры (символ ‘точка’)

имя_поля – это элемент структуры

pr1.code

pr2.price

mpr[6].num

С элементами структур можно выполнять различные операции (ввод, вывод, присваивание, сравнение):

pr1.price=850.0;

scanf(“%d”, &pr1.num);

if(pr1.code = = pr2.code) ...;

puts(pr2.name);

8.4 Структуры и указатели

Для структур, описанных 1 или 2 способом можно создавать указатели на структуры:

TProd b,*ptr_b;

ptr_b=&b; /* присвоим указателю адрес структуры */

Для выделения элементов структуры через указатель используется форма записи

указатель->имя_поля (‘->’ записывается как ‘минус’‘больше’)

ptr_b->name

ptr_b->price

Можно использовать точку (‘.’):

(*ptr_b).price

Скобки нужны, так как операция . старше операции *.

void fs(TProd *ptx,...)

{

ptx->code=1311;

...

}

Вызов функции:

fs(&b,...);

Указатели на структуры часто используются как аргументы функции, для передачи в функцию только адреса структуры, а не всей структуры.

8.5. Битовые поля в структурах

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

Форма записи: (для 3-го способа)

struct

{

тип1 имя1: N1;

тип2 имя2: N2;

...

типk имяk: Nk;

} перем1, перем2, ...;

где тип – это тип битового поля, может быть int или unsigned;

имя – обозначение поля;

Ni – длина битового поля, количество двоичных разрядов

Ni=16 (2 байта) или 32 (4 байта).

перем – это имя переменной с битовыми полями

Если группа битов не используется, то в структуре ей не назначается имя.

тип: Ni;

Для таких структур можно также использовать 1-й способ (через шаблон структуры) или 2-й способ (через typedef) описания.

Пример:

struct

{

int p1 :4;

unsigned p2 :3;

int :3;

unsigned p3 :2;

unsigned p4 :4;

} vb;

Работа с битовыми полями:

vb.p1=10;

If (vb.p3==0) ... ;

min P1==-7 (1111) max P1==7 (0111)

min P4==0 (0000) max P4==15 (1111)

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

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

Форма записи:

union

{

тип1 имя1;

тип2 имя2;

...

типN имяN;

} перем1, перем2, ...;

где тип – обозначение типа поля (int, float, char,...)

имя – обозначение поля

перем – имя переменной, которая является объединением.

Пример:

union

{

char f1;

int f2;

float f3;

double f4;

} a, b;

Также, как и структуры, объединения можно описывать 3-мя способами: 1 (через шаблон объединения), 2 (через typedef), 3 (одновременное описание шаблона объединения и объявление переменных).