Да, именно так и написано во встроенном хелпе: Цитата | Valid result types are ordinal, real, string, and pointer. |
То есть, передать в качестве результата функции другой тип (record, например) - нельзя!
Но, если очень хочется - то можно !
Код |
type MyType=record man:integer; girl:integer; end;
function MyFunction(x:integer):longint; var t:MyType; r:longint absolute t; begin t.man:=x; t.girl:=random(10); MyFunction:=r; end;
var y:MyType; z:longint absolute y; begin z:=MyFunction(5); writeln('y.man=',y.man); writeln('y.girl=',y.girl); end.
|
Просто мы здесь используем несложный прием - две переменные в одной области памяти, плюс нам повезло с исходной структурой - она занимает 4 байта. integer(2) + integer(2) = longint(4) И все ок! Фактически, мы передаем нужную структуру, а формально - ничего не нарушили! |