Лекция С++ (структуры и объединения).ppt
- Количество слайдов: 23
Структуры и объединения
Структура n n Структурированный тип данных Набор данных различного типа Элементы структуры – поля Поля именуются
Описание структуры struct имя_типа_структуры { тип_поля имя_поля; … } имя_переменной_структуры; … имя_типа_структуры имя_переменной_структуры;
Пример описания структуры struct type_person { char FIO[255]; struct address { char street[255]; int building, room; } address; int age; } person; FIO street building room age
Обращение к полям структуры имя_переменной_структуры. имя_поля
Пример обращения к полям структуры printf(“%s”, person. FIO); scanf(“%i”, &person. address. building); person. age=45;
Объединение n n n Схожа со структурой Поля накладываются в памяти друг на друга Размер объединения = размер максимального поля
Описание объединения union имя_типа_объединения { тип_поля имя_поля; … } имя_переменной_объединения; … имя_типа_объединения имя_переменной_объединения;
Пример работы с объединением u union { int dword; char byte; } u; u. dword=0 x 12345678; printf(“%xn”, u. byte); u. byte=0 x 12; printf(“%x”, u. dword); 12 34 56 78 dword byte 78 12345612
Пример работы с объединением reg union { 12 34 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 { Иванов Иван Ива… char FIO[255]; struct Ленина { 67 address char street[255]; 90 int building, room; } address; 45 int age; } person={“Иванович”, {“Ленина”, 67, 90}, 45};
Битовые поля структур struct имя_типа_структуры { тип_поля имя_поля: ширина_поля_в_битах; тип_поля имя_поля; … } имя_переменной_структуры; … имя_типа_структуры имя_переменной_структуры;
Битовые поля объединений union имя_типа_объединения { тип_поля имя_поля: ширина_поля_в_битах; тип_поля имя_поля; … } имя_переменной_объединения; … имя_типа_объединения имя_переменной_объединения;
Пример использования битовых полей структур struct 1 0 { int ready: 1; iostatus int mode: 3; int : 4; int iostatus: 2; } status; 0 0 1 1 mode 1 0 ready
Пример использования битовых полей объединений union { int ready: 1; int mode: 3; int iostatus: 2; } status; 1 1 0 ready mode iostatus
Пример использования битовых полей структур в объединениях union { struct { int ready: 1; int mode: 3; int : 2; int iostatus: 2; } bits; char byte; }status; status. byte=0 x 86; printf(“%d”, status. bits. mode); 1 0 0 0 iostatus 0 1 mode byte 3 1 0 ready
Работа с файлами
Основные операции с файлом n n n n Открытие/создание – fopen() Чтение – fscanf( ), fgets( ), fread( ) Определение метки конца файла – feof() Запись – fprintf( ), fputs( ), fwrite( ) Закрытие – fclose() Позиционирование указателя – fseek( ) Блокировка – 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