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

В файле надо сохранить пять переменных, ответственных за работу пасьянса — Cycle, Line, Pos, Pack и Well. Все методы класса хранятся непосредственно в коде программы в жестком, неизменном виде, а всю остальную специализированную информацию, имеющуюся в классе главной формы, сохранять не надо — вполне достаточно обойтись только пользовательскими данными.

Чтобы записать в файл содержимое переменной Cycle, надо указать ее адрес — таковы требования FileWrite(). Этот адрес можно получить с помощью операции Си++ «&», имеющий один операнд и располагаемой слева от него — в частности, адресом переменной Cycle будет выражение &Сус1е.

h02321.jpg

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

А как узнать размер переменной Cycle (сколько для нее отведено места в памяти) в байтах? Для этого служит операция Си++ под названием sizeofQ.

h02322.jpg

si'zeofQ — это не стандартная функция, а операция, такая же, как «=», «+» или «&». Просто sizeofQ — единственная в своем роде операция, которая записывается не специальным символом, а буквами, sizeof — зарезервированное слово Си++.

В качестве параметра операции sizeofQ можно указывать как переменную, так и тип. Например, выражение sizeof(Cycle), которое будет иметь значение 4 (4 байта), равно значению sizeof(int) (размер переменной типа int), так как тип Cycle — int.

Тогда оператор записи содержимого переменной Cycle будет выглядеть так:

FileWrite (iFile, ScCycle, sizeof(Cycle));

Аналогично записываются и операторы сохранения других переменных, в том числе и пользовательского класса Pack:

FileWrite(iFile, &Pack, sizeof(Pack));

232