![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Function 2 значения
Stepan4ik © (2014-09-21 00:41:00)Как вернуть 2 значения с функции ?
1-ое Result, а 2-е ?
И можно пример, пжл )
Inovet (2014-09-30 20:12:00) [1]> [21] DQ (30.09.14 14:54)
> Возврат функции есть значение в регистре EAX
Какая разница где оно там возвращается, это не влияет на язык.
junglecat (2014-09-30 16:38:00) [2]> не вбивайте double в Яндекс
а что там такого страшного?
brother (2014-09-30 16:21:00) [3]я про инерпретацию...
DQ (2014-09-30 15:32:00) [4]> возвращаем word
Ну и?) Возвращаем одноWord :)
А уже что с ним дальше это отдельная история.
> double возвращается через ST0 в стеке fpu
мда? Разве не по указателю? Думал в ST0 возвращаются только при работе с функциями FPU. Ну может быть, спасибо за просвещение. С:
Кстати не вбивайте double в Яндекс.... о___0
junglecat (2014-09-30 15:09:00) [5]> Возврат функции есть значение в регистре EAX
это если влезает. double возвращается через ST0 в стеке fpu, что не влезло - через скрытые var-параметры
brother (2014-09-30 14:56:00) [6]> Но вернуть можно только одно значение.
возвращаем word интерпетируем как 2 byte :)
DQ (2014-09-30 14:54:00) [7]> Как вернуть 2 значения с функции ?
Никак. Возврат функции есть значение в регистре EAX.
Можно вернуть указатель. Можно менять значения переменных внутри функции переданные туды по указателям. Но вернутьможно только одно значение.
Дмитрий (2014-09-26 16:12:00) [8]еще можно возвращать массив
(2014-09-25 16:52:00) [9]Удалено модератором
Керк (2014-09-25 16:41:00) [10]Формально MyResult - это не два значения, а одно :)
brother (2014-09-23 18:01:00) [11]> При обычном вызове он бьёт ошибку. Мол тип MyResult...
чего именно в ошибке Вы не поняли?
antonn (2014-09-23 16:50:00) [12]
> Stepan4ik (21.09.14 02:03) [9]
>
> Всё. Догнал.
> А как функцию теперь вызватьи получить значения ?
> При обычном вызове он бьёт ошибку. Мол тип MyResult...
ну тогда есть уже Tpoint на 2 значения и TRecord на 4 значения =)
(2014-09-22 07:30:00) [13]Удалено модератором
Pavia (2014-09-21 18:31:00) [14]function SumSub(a,b:Integer; var Sum:Integer; var Sub:Integer):Boolean;
begin
Result:=True;
Sub:=a-b;
Sum:=a+b;
Result:=((not (a xor b) and (a xor Sum)) shr 31) <>0;
end;
Плохиш (2014-09-21 11:39:00) [15]
> Stepan4ik (21.09.14 02:03) [9]
> Всё. Догнал.
> А как функцию теперь вызватьи получить значения ?
> При обычном вызове он бьёт ошибку. Мол тип MyResult...
>
В ошибке, которую бьют, разве не написано, что надо поменять прокладку?
Германн (2014-09-21 03:24:00) [16]
> сорри, чейто понесло :))
>
Ну да. Конечно. Суперпупер проекты вы клепаете без проблем. А основы паскаля/Дельфи почти забыли.
Rouse__ (2014-09-21 03:01:00) [17]Делай переменную типа записи MyResult и ей присваивай результат вызова функции.
(Пфф... типа ей мы типо присвоим типо результат - сорри, чейто понесло :))
Stepan4ik (2014-09-21 02:47:00) [18]?
Stepan4ik (2014-09-21 02:03:00) [19]Всё. Догнал.
А как функцию теперь вызватьи получить значения ?
При обычном вызове он бьёт ошибку. Мол тип MyResult...
type
MyResult = record
sum:integer;
raz:integer;
end;
function GetSum(a, b : Integer) : MyResult;
begin
Result.sum:=a+b;
Result.raz:=a-b;
end;
Stepan4ik (2014-09-21 02:02:00) [20]Всё. Догнал.
А как функцию теперь вызватьи получить значения ?
При обычном вызове он бьёт ошибку. Мол тип MyResult...
type
MyResult = record
sum:integer;
raz:integer;
end;
function GetSum(a, b : Integer) : MyResult;
begin
Result.sum:=a+b;
Result.raz:=a-b;
end;