- •6. Функции в языке с
- •6.1 Описание функции
- •Void main()
- •6.2 Вызов функции
- •6.3 Варианты описания и использования функций
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •7. Работа со строками
- •7.1 Способы описания строк в программе
- •7.2 Ввод-вывод строк
- •7.3 Функции для работы со строками
- •8. Структуры и объединения в языке с
- •8.1 Описание структур
- •8.2 Инициализация структур
- •8.3 Работа с элементами структур
- •8.4 Структуры и указатели
- •8.5. Битовые поля в структурах
- •Работа с битовыми полями:
- •8.6. Объединения
- •Работа с полями объединения
- •8.7. Отличие объединения от структуры
- •8.8. Применение объединений
- •Void main()
- •9. Файлы в языке c. Функции работы с файлами
- •A) чтение данных из файла
- •Б) запись данных в файл
- •Дополнительные функции для работы с файлами
- •10. Программирование в графическом режиме
- •Функции библиотеки graphics
- •Управление графической системой Управление графическим режимом производится с помощью следующих функций:
- •Черчение и заполнение
- •Управление цветом
- •Обработка ошибок в графическом режиме
- •Функции запроса состояния
- •Void main()
- •11. Директивы препроцессора
- •11.1. Директива #include
- •11.2. Директива #define
- •11.3. Директива #undef
- •12. Побитовые (поразрядные) операции
- •Использование побитовых операций
Работа с полями объединения
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
