Я вот описал класс, и там были в числе прочих, где-то внутри огромного списка переменных такие строчки:
...
Color: TColor;
S1, S2: byte;
IsTrailer, IsLeft, IsRight, IsStop, IsNight: boolean;
DoorState: double;
...
В другом модуле я описал структуру:
type TAttr = record
Color: TColor;
S1, S2: byte;
IsTrailer, IsLeft, IsRight, IsStop, IsNight: boolean;
DoorState: double;
end
И завел переменную - указатель на неё:
var
Attr: ^TAttr;
Значит у меня много переменных вышеописанного класса, и общение программы с модулем происходит именно через вот этот самый Attr таким образом:
Attr := @Color;
Я предполагаю, что в объекте данные, описанные подряд, находятся тоже подряд, и поэтому, присвоив указатель таким способом, я автоматически получаю соответствие между одноимёнными переменными.
Но меня постиг облом. Так выходит, что DoorState <> Attr.DoorState;
Я очень этому удивился, и прогнал программу, просмотрев в Watches значения указателей на переменные.
И оказалось, что вот те булевские переменные идут в памяти подряд, одна за другой с шагом в 1 байт, а вот DoorState почему-то отстоит от IsNight на 2 байта!
Так вот, какой быстрый способ присвоения этого Attr вы посоветуете? Или как настроить компилятор, чтобы данные располагались как положено?