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

Работа с полями объединения

a.f2=276;

a.f3=1342.751;

if(b.f1==’+’)...;

8.7. Отличие объединения от структуры

В структуре поля размещаются в памяти последовательно. Общая длина структуры равна сумме длин полей

struct

{

char f1;

int f2;

float f3;

double f4;

} c, d;

1 байт

2 байта

4 байта

8 байт

C

f1

f2

f3

f4

Lc=15 байт

В объединении поля размещаются с одного и того же адреса памяти. Длина объединения равна max(Lполя).

Значения для полей в объединении можно задавать в разное время (сначала a.f2=500; потом работаем с а.f2; a.f3=17.356; работаем с a.f3).

8.8. Применение объединений

1. Для экономии памяти. На одном участке памяти размещают несколько переменных, массивов, с которыми работают в разное время.

union

{

int art1[2000];

float fdr2[1000];

} z;

2. Для обеспечения доступа к участку памяти в целом и по частям (через битовые поля)

Пример:

#include <stdio.h>

struct bf

{

unsigned p1:6;

unsigned p2:4;

unsigned p3:3;

unsigned p4:3;

};

union

{

int k;

struct bf d;

} m;

Void main()

{

m.k=0xfdb9;

printf(“k=%x\n p1=%x p2=%x p3=%x p4=%x\n ”,

m.k, m.d.p1, m.d. p2, m.d. p3, m.d. p4);

m.d.p1=0x3e;

m.d.p2=0xa;

printf(“Значения полей после их изменения\n”

printf(“k=%x\n p1=%x p2=%x p3=%x p4=%x\n ”,

m.k, m.d.p1, m.d. p2, m.d. p3, m.d. p4);}

Запишем К, P1, P2, P3, P4 по битам:

К

F

D

B

9

1111

1101

1011

1001

111

111

0110

11 1001

7

7

6

3 9

P4

P3

P2

P1

После изменения:

К

F

E

B

E

111

1

11

10

10

11

1110

7

7

A

3

E

P1 P3 P2 P1