Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Решенные оветы на теорию Си.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
166.91 Кб
Скачать

23. Указатели и структуры. Передача структур по указателю.

Все описания и необходимую на ваш взгляд инфу можно взять из предыдущей главы.

Как и любой другой элемент, структуры хранятся в ячейке памяти (размером, равным размеру данной структуры), имеющей определённый адрес. Естественно, можно определить указатель на эту ячейку, написав его тип, чтобы он, указатель,“знал”, какое место этой ячейкой занимается. Делается это так:

my_struct *p;

Для доступа к элементу по адресу используется конструкция *p, как и для любого другого указателя. К полю структуры можно обратиться следующим образом:

(*p).<имя поля>

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

p -> <имя поля>

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

print(p);

void print(my_struct *p)

{

printf(“Содержимое целочисленного поля ‘а’ структуры my_struct ячейки по адресу p %i”, p->a);

}

24. Структура битовых полей. Особенности использования.

Битовые поля являются удобным средством обработки запакованных данных.

Рассмотрим сразу на примере. Пусть имеем структуру:

enum WEEKDAY {MONDAY, TUESDAY, ...}; // дни недели

struct date

{

unsigned short year;

unsigned char month;

unsigned char day;

WEEKDAY wday;

bool isHoliday;

};

Подобная структура займёт 12 байт, хотя для хранения полезной инфы мы используем всего 25 бит. Поэтому мы можем упаковать эти данные (аналогично записям в ЯА) в 4 байта, но работать вручную с этими наборами битов (короткими переменными) в 4 байтах очень неудобно, поэтому рассмотрим пример использования битовых полей.

Особенности использования:

  • под полем имеется в виду отдельно каждая короткая переменная

  • для каждой переменной отводится не больше битов, чем заказал программист

  • несколько таких логически разных переменных хранятся в одной физической переменной подходящей длины

  • компиллятор за программиста выделяет нужное количество битов и выполняет все битовые операции и сдвиги, извлекая и запаковывая значения.

Синтаксис объявления:

<тип> [<идентификатор>] : <размер поля в битах>

Далее, что называется, кому интересно, прочитайте статью http://cpp.com.ru/shildt_spr_po_c/07/0707.html =)

Информация взята с сайта http://cpp.com.ru и из книжки Полубенцевой Марины “C/C++. Процедурное программирование”

25. Основы файловой системы: файл, каталог, дисковод, полное имя файла, внутреннее представление информации в файле. Типы файлов.

Фа́йловая систе́ма — порядок, определяющий способ организации, хранения и именования данных на носителях информации в компьютерах, а также в другом электронном оборудовании.

Файловая система определяет формат содержимого и способ физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла (папки), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Классификация файловых систем:

Для носителей с произвольным доступом (например, жёсткий диск): FAT32, HPFS, ext2 и др. Поскольку доступ к дискам в разы медленнее, чем доступ к оперативной памяти, для прироста производительности во многих файловых системах применяется асинхронная запись изменений на диск. Для этого применяется либо журналирование, например в ext3,ReiserFS, JFS, NTFS, XFS, либо механизм soft updates и др. Журналирование широко распространено в Linux, применяется в NTFS. Soft updates — в BSD системах.

Файл — блок информации на внешнем запоминающем устройстве компьютера, имеющий определённое логическое представление, соответствующие ему операции чтения-записи и, как правило, фиксированное имя (символьное или числовое), позволяющее получить доступ к этому файлу и отличить его от других файлов.

Полное имя файла: <имя файла>.<расширенише> (например stdio.h).

Из лекций о типе FILE:

FILE *f;

typedef struct

{

short level; //уровень буфера

undigned flags; //флаги статусного файла ввода/вывода (я хз что это)

char fd; //дескриптор файла

unsigned hold; // предыдущий символ, если нет буфера

short size; // размер буфера

unsigned char *buffer; //адрес буфера

unsigned char *curp; // текущий указатель в буфере

unsugned istemp;

short token; // для проверки корректности файла

} FILE;

Катало́г — объект в файловой системе, упрощающий организацию файлов. Типичная файловая система содержит большое количество файлов и каталоги помогают упорядочить её путём их группировки.

Каталог, прямо или косвенно включающий в себя все прочие каталоги и файлы файловой системы, называется корневым.Текущим называется каталог, с которым работает ОС, если ей не указать другого каталога.Родительским каталогом называется каталог, в котором находится текущий.

Дисковод — устройство компьютера, позволяющее осуществить чтение или запись информации на носители информации. Основное назначение дисковода, в рамках концепции иерархии памяти — организация долговременной памяти. Основная характеристика дисковода — объём дискового пространства (объем памяти), измеряемый в байтах.

Типы файлов

В различных операционных и/или файловых системах могут быть реализованы различные типы файлов; кроме того, реализация различных типов может различаться.

По одним критериям различают:

  • «Обыкновенный файл» — файл, позволяющий операции чтения, записи, перемещения внутри файла

  • Каталог или директория — файл, содержащий записи о входящих в него файлах. Каталоги могут содержать записи о других каталогах, образуя древовидную структуру.

Различают также файлы по типу доступа:

  • файлы последовательного типа доступа;

  • файлы произвольного доступа;(см. в след. пункте);