При передаче в функцию переменной типа указатель в функцию передается адрес этой переменной, а не ее значение!? Почему и можно ли это как-то изменить? Дело в том что в программах на языке с в функцию передается именно значение переменной-указателя, а не ее адрес.
Есть код:
- Код: Выделить всё
type
PNewStruct = ^TNewStruct;
TNewStruct = record
a: LongInt;
end;
var
st: TNewStruct;
pst: ^TnewStruct;
function F1(pst: PNewStruct): LongInt; cdecl;
var
i: LongInt;
begin
i := pst^.a + 1;
Result := i;
end;
begin
pst := @st;
F1(pst);
end.
Ассемблерный листинг:
F1(pst)
0804EF08 pushl 0x80d3df0
0804EF0E call 0x804ee90 <F1>
где, 0x80d3df0 — адрес на переменную pst. По этому адресу хранится значение 0x080D3DEC. А это адрес на переменную st. По этому адресу хранится значение 00000000. Так вот, по идее должен передаваться в функцию именно адрес переменной st, т.е. - 0x080D3DEC.
Интересно, что в Delphi работает так же как и в программах на языке с. Т. е. передается адрес переменной st.
Пишу на Linux, использую паскаль версии: Free Pascal Compiler version 2.4.0-2 [2010/03/06] for i386
IDE — MSEgui version: 2.2
MSEide version: 2.2
Что с опцией -Mdelphi, что с -Mobjfpc результат одинаков.