Структуры и объединения
Структуры и объединения
Структура n Структурированный тип данных n Набор данных различного типа n Элементы структуры – поля n Поля именуются
Описание структуры struct имя_типа_структуры { тип_поля имя_поля; … } имя_переменной_структуры; … имя_типа_структуры имя_переменной_структуры;
Пример описания структуры struct type_person { person FIO char FIO[255]; street struct { address building char street[255]; room int building, room; age } address; int age; } person;
Обращение к полям структуры имя_переменной_структуры. имя_поля
Пример обращения к полям структуры printf(“%s”, person. FIO); scanf(“%i”, &person. address. building); person. age=45;
Объединение n Схожа со структурой n Поля накладываются в памяти друг на друга n Размер объединения = размер максимального поля
Описание объединения union имя_типа_объединения { тип_поля имя_поля; … } имя_переменной_объединения; … имя_типа_объединения имя_переменной_объединения;
Пример работы с объединением u union 12 34 56 78 { int dword; dword char byte; byte } u; u. dword=0 x 12345678; printf(“%xn”, u. byte); 78 u. byte=0 x 12; 12345612 printf(“%x”, u. dword);
Пример работы с объединением reg 12 34 union ax { ah al short ax; struct { 12 34 char al, ah; }byte; } reg; reg. ax=0 x 1234; printf(“%x %x”, reg. byte. ah, reg. byte. al);
Инициализация имя_типа имя_переменной= { нач_знач_поля№ 1, нач_знач_поля№ 2, … }; имя_типа имя_перменной={0}; //обнуление всех полей
Пример инициализации struct type_person { person char FIO[255]; Иванов Иван Ива… struct Ленина { address 67 char street[255]; int building, room; 90 } address; 45 int age; } person={“Иванович”, {“Ленина”, 67, 90}, 45};
Битовые поля структур struct имя_типа_структуры { тип_поля имя_поля: ширина_поля_в_битах; тип_поля имя_поля; … } имя_переменной_структуры; … имя_типа_структуры имя_переменной_структуры;
Битовые поля объединений union имя_типа_объединения { тип_поля имя_поля: ширина_поля_в_битах; тип_поля имя_поля; … } имя_переменной_объединения; … имя_типа_объединения имя_переменной_объединения;
Пример использования битовых полей структур struct 1 0 0 0 1 1 1 0 { int ready: 1; iostatus mode ready int mode: 3; int : 4; int iostatus: 2; } status;
Пример использования битовых полей объединений union { 1 1 0 int ready: 1; ready int mode: 3; mode int iostatus: 2; } status; iostatus
Пример использования битовых полей структур в объединениях union { struct 1 0 0 1 1 0 { int ready: 1; iostatus mode ready int mode: 3; int : 2; byte int iostatus: 2; } bits; 3 char byte; }status; status. byte=0 x 86; printf(“%d”, status. bits. mode);
Работа с файлами
Основные операции с файлом n Открытие/создание – fopen() n Чтение – fscanf( ), fgets( ), fread( ) n Определение метки конца файла – feof() n Запись – fprintf( ), fputs( ), fwrite( ) n Закрытие – fclose() n Позиционирование указателя – fseek( ) n Блокировка – lock( ), unlock( )
Открытие файла (stdio) FILE *fopen(const char *filename, const char *mode); “r” Открытие для чтения “w” Открытие для записи. Существуюший файл перезаписывается “a” Дозапись в файл, либо создание нового, если указанный не существует “r+” Открытие существующего файла для чтения и записи “w+” Открытие файла для чтения и записи, с перезаписью существующего файла “a+” Открытие для дозаписи, либо создания, с возможностью чтения и записи от конца файла b Открытие файла в двоичном режиме
Чтение файла (stdio) char *fgets(char *s, int n, FILE *stream); int fscanf(FILE *stream, const char *format[, address, . . . ]); size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
Запись в файл (stdio) int puts(char *s, FILE *stream); int fprintf(FILE *stream, const char *format[, address, . . . ]); size_t fwrite(void *ptr, size_t size, size_t n, FILE *stream);
Позиционирование файлового указателя (stdio) int fseek(FILE *stream, long offset, int whence); SEEK_SET 0 Смещение от начала файла SEEK_CUR 1 Смещение от текущей позиции файлового указателя SEEK_END 2 Смещение от конца файла
Лекция С++ (структуры и объединения).ppt
- Количество слайдов: 23

