procedure One;
var temp:TStringList;
begin
temp:=TStringList.Create;
temp.Add('1');
temp.Add('2');
Two(temp);
temp.Free;
end;
procedure Two(test:TStringList);
begin
Memo1.Text:=test.Text;
end;
Визуально код работает корректно, т.е. в Мемо появляются 2 строки соответствующие.
Но меня всё же смущает, что стринглист во второй процедуре мне не надо было создавать, а я просто указал параметру этот тип.
Подскажите, корректен ли данный код или там есть подводные камни?
Благодарю.
Добавлено через 52 минуты
Товарищ zombiee подсказал, что код корректный и никаких подводных камней не имеет.
Если никто не против, то можно закрыть обсуждение.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)
Кто плюсует популярность, подписывайтесь пожалуйста)
Последний раз редактировалось NebesaBag; 17.05.2015 в 22:03.
Причина: Добавлено сообщение
Любая переменная типа класса является указателем на область в памяти, где этот класс находится. Тоесть, по факту, вы передаёте указатель. Но всё же лучше дать компилятору понять, что вы передаёте параметр, как переменную.
Код:
procedure One;
var
temp: TStringList;
begin
temp := TStringList.Create;
temp.Add('1');
temp.Add('2');
Two(temp);
temp.Free;
end;
procedure Two(var test: TStringList);
begin
Memo1.Lines.Clear;
Memo1.Lines.AddStrings(test);
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Если я припишу "var" в параметрах процедуры, то от любого действия над локальной переменной в процедуре Two будет "страдать" родитель.
Не так ли?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)
Кто плюсует популярность, подписывайтесь пожалуйста)
Ты передаёшь указатель, в любом случае "страдать" будет объект класса. Если ты хочешь, чтобы объект класса не тронуло, тогда надо создавать ещё один и копировать переданный в параметрах.
Код:
procedure blabla(var StringList: TStringList);
var
Temp: TStringList;
begin
Temp := TStringList.Create;
Temp.Assign(StringList);
//Do smth
Temp.Free;
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).