Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > почему пропали изменения?


Автор: Guest 28.9.2005, 10:26
в функцию передается массив, в ней изменяются некоторые элементы массива, после выхода из функции изменения пропадают, почему?

как грамотно в описанной ситуации передавать переменные в функцию?

что означает var при передаче параметром (function f(var i : integer)) ?

Автор: Albinos_x 28.9.2005, 10:35
код в студию...

Автор: Guest 28.9.2005, 10:45
спасибо разобрался, как раз var и нужен был

Автор: Payne 28.9.2005, 10:50
var означает, что переменная будет использоваться в функции (и больше нигде). Например:

Код

function summa (var a,b: integer): integer;
begin
  result := a+b;
end;

В данной функции два параметра - a и b. Ты можешь передать в функцию любые значения или переменные типа integer, а в самом теле функции они будут считаться a и b. К примеру, если ты пишешь summa (2, 3), то a будет равно 2, b будет равно 3. Можно также записать summa (var1, var2, ...). При этом те значения, которые ты передал в функцию, никак не меняются. Поэтому и изменения с массивом после выхода из функции "пропадают".
В вышеприведенном коде result := ... означает, что функция возвращает то, что написано в правой части оператора. Тип возвращаемого значения определен в заголовке функции: function summa (параметры): тип. Т.е. в твоем случае нужно после операций с массивом записать, к примеру, такую строку:
Код

result := arr; //это тот массив, который получился после операций с его элементами


причем сама функция должна возвращать массив. Допустим, имя функции ar_operations. Имя переменной-массива - arr_var. Тогда вызываешь функцию так: arr_var := ar_operations (arr_var);
В этом случае массив передается в функцию, она производит над ним операции и возвращает какой-то результат в виде массива. Его ты и присваиваешь переменной arr_var, с которой работаешь.

Автор: Петрович 28.9.2005, 11:03
Цитата(Payne @ 28.9.2005, 11:50)
var означает, что переменная будет использоваться в функции (и больше нигде). Например:

Блин. А ты вообще знаешь то о чем пишеш-то?
Да будет тебе известно, модификатор var действует с точностью до наоборот.
Почитай что-нибудь по основам языка Pascal/Delphi. А уж потом, давай ответы.
Прости за грубость. smile

Автор: Guest 28.9.2005, 11:05
так изменения пропали
Код

procedure myProc(arMy : TarMy);

а так изменения сохранились
Код

procedure myProc(var arMy : TarMy);


есть ощущение что сущность var вами раскрыта не полностью

конечно можно заменить
Код
procedure
 на 
function

 и 

myProc(arMy);
 на 
arMy := myProc(arMy);

но зачаем лес та городить?

Автор: Payne 28.9.2005, 11:41
Цитата
Почитай что-нибудь по основам языка Pascal/Delphi

Да знаю я основы Pascal/Delphi, иначе не заработал бы репу +11 (т.е. уже +10 smile). Просто неправильно выразил мысль, вот и все.

Цитата(Guest @ 28.9.2005, 10:05)
но зачаем лес та городить?

Подожди, если я правильно понял, то в первом твоем посте говорится про функцию. Вот про функцию я тебе и написал... А тут вдруг ты меняешь функцию на процедуру, и говоришь мне "зачем лес городить". Нехорошо получается.

Автор: Guest 28.9.2005, 12:04
Цитата(Payne @ 28.9.2005, 11:41)
Цитата(Guest @ 28.9.2005, )
но зачаем лес та городить?

Подожди, если я правильно понял, то в первом твоем посте говорится про функцию. Вот про функцию я тебе и написал... А тут вдруг ты меняешь функцию на процедуру, и говоришь мне "зачем лес городить". Нехорошо получается.

в данном случае на мой взгляд более важен способ передачи данных, а именно
Код

myProc(arMy);
 и 
arMy := myProc(arMy);

от того что procedure была заменена на function в рассматриваемом вопросе мало что поменялось, так тоже работает:
Код

function myProc(var arMy : TarMy);
...
myProc(arMy);

изменения сохранены
так что я несовсем понял суть претензии

Автор: Петрович 28.9.2005, 12:15
Цитата(Payne @ 28.9.2005, 12:41)
Просто неправильно выразил мысль, вот и все.

Ну да.
Тогда если вдруг меня спросят что означает слово "True", я отвечу что это означает "лож". Это можно будет считать что я неправильно выразил свою мысль. smile

Цитата(Payne @ 28.9.2005, 12:41)
Подожди, если я правильно понял, то в первом твоем посте говорится про функцию.

А тут, я думаю просто элементарная непонятка. Очень часто, термин "функция" используют для обозначения не только "function", но "procedure". Просто, имеется ввиду нечто, реализующее некоторую функциональность.
Более того, во многих языках программирования, понятия процедуры вообще отсутствует. Там есть только функции.

Автор: Girder 4.10.2005, 23:49
http://forum.vingrad.ru/index.php?showtopic=57330

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)