Структура — один из самых полезных инструментов языка Си. Глобальные структуры определяются вне функций. Автоматические структуры определяются внутри функций. Вы объявляете структуру, вставляя ее имя и идентификаторы полей в текст программы.
Вы определяете структуру, когда выделяете для нее память. Структура есть объект, занимающий память. Слово объект здесь не имеет отношения к понятию объекта класса.
Автоматические структуры локальны для своей определяющей функции, т.е. только определяющая функция может непосредственно использовать эту структуру и последняя автоматически удаляется, когда функция завершается. Простой оператор, резервирующий память для объекта aSrtuct типа ANYSTRUCT, имеет вид:
ANYSTRUCT aStruct;
Если этот оператор встречается вне функции, он создает глобальный объект в сегменте данных программы. Если этот оператор встречается внутри функции, то возникает автоматический объект, который автоматически создается при вызове данной функции и удаляется по ее окончании. Расположение сегмента данных и стека определяется самой системой Windows.
Замечание. В расширенном режиме Windows процессор адресует память не напрямую, а через селекторы, которые отображаются на физические адреса. Windows может также преобразовывать часть пространства жесткого диска в виртуальную память. Этот факт означает, что объекты могут вытесняться на диск или перемещаться по памяти, освобождая при этом место для других данных, а затем автоматически возвращаться в память по старым или новым адресам. К счастью, все сказанное происходит без участия прикладной программы, которой в большинстве случаев даже не нужно знать об этих закулисных манипуляциях с памятью.
Для обращения к элементам структуры используется символ точки. Например, если ANYSTRUCT имеет элемент count целого типа, следующий оператор присваивает его значение целой переменной х:
x=aStruct.count;
Чтобы указать адрес объекта, используйте aStruct с символом ам-персанда (&) в начале имени. Например, для указания адреса элемента count структуры aStruct применяйте обозначение &aStruct.count. Вы можете передать aStruct по адресу в функцию, параметр которой объявлен как ANYSTRUCT * (указатель на объект типа ANYSTRUCT):
f(&aStruct);
Чтобы передать aStruct по значению в функцию с параметром типа ANYSTRUCT (а не указатель на объект данного типа), просто укажите имя структуры:
f(aStruct);
Эти приемы работы со структурами должны быть освещены в любом хорошем руководстве по Си или в курсе по программированию. Если вы не владеете ими, изучите основы программирования на Си, прежде чем продолжить чтение книги.
Предупреждение. Объявление больших структур как глобальных может быстро исчерпать 64К-байтовый предел сегмента данных программы. По этой причине самые большие структуры должны быть размещены в динамической памяти Windows, как будет показано далее.
Отдых. Испания отели для семей с детьми в Коста-дель-Соль туризм.
travel.dmir.ru
Производство лаков и красок. Продажа отделочных материалов.
stena.ru