forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Проблема передачи параметров в функцию (http://forum.boolean.name/showthread.php?t=12571)

Igor 27.05.2010 21:43

Проблема передачи параметров в функцию
 
Наткнулся на такую проблему. Вот пример для её демонстрации:
Цитата:

program test4;

//объявляю тип
type
xz=array [1..2] of integer;

var
//указываю переменную этого типа
a:xz;

procedure mega(b:xz);
begin
b[2]:=1;
end;
//казалось бы, изменяя b[2], мы меняем только локальную переменную

begin
a[1]:=3;
a[2]:=4;
//присваиваю
mega(a);
//теоретически, "a" не должно измениться
drawText(integertostring(a[2]), 0, 0);
//выводит ответ 1 вместо 4
repaint;
delay(5000);
end.

Пытался изменить на
Цитата:

procedure mega(b:xz);
var c:xz;
begin
c:=b;
c[2]:=1;
end;

В таком случае выдает ошибку

Как сделать, чтобы передаваемая в функцию глобальная переменная своего типа данных не изменялась?
А то рекурсивный алгоритм не получается...

abcdef 29.05.2010 14:25

Ответ: Проблема передачи параметров в функцию
 
т.к. в данном случае MidletPascal не создает для типа отдельный class то копировать его нужно самому поэлементно. Т.е. c:=b; необходимо описать for i:=1 to 2 do c[i]:=b[i];

Ksanatos 21.09.2010 19:21

Ответ: Проблема передачи параметров в функцию
 
Хи а вот и способ обхода не вариабельности передоваемых переменных


Часовой пояс GMT +4, время: 22:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot