|
Вопрос к знатокам TStringList - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
17.05.2015, 21:11
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
|
Вопрос к знатокам TStringList
Здравствуйте.
Допустим есть следующий код:
Код:
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 подсказал, что код корректный и никаких подводных камней не имеет.
Если никто не против, то можно закрыть обсуждение.
Последний раз редактировалось NebesaBag; 17.05.2015 в 22:03.
Причина: Добавлено сообщение
|
|
|
18.05.2015, 00:16
|
#2
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Вопрос к знатокам TStringList
Любая переменная типа класса является указателем на область в памяти, где этот класс находится. Тоесть, по факту, вы передаёте указатель. Но всё же лучше дать компилятору понять, что вы передаёте параметр, как переменную.
Код:
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;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
18.05.2015, 05:19
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
|
Re: Вопрос к знатокам TStringList
Если я припишу "var" в параметрах процедуры, то от любого действия над локальной переменной в процедуре Two будет "страдать" родитель.
Не так ли?
|
|
|
19.05.2015, 11:34
|
#4
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Вопрос к знатокам TStringList
Ты передаёшь указатель, в любом случае "страдать" будет объект класса. Если ты хочешь, чтобы объект класса не тронуло, тогда надо создавать ещё один и копировать переданный в параметрах.
Код:
procedure blabla(var StringList: TStringList);
var
Temp: TStringList;
begin
Temp := TStringList.Create;
Temp.Assign(StringList);
//Do smth
Temp.Free;
end;
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
Пользователь сказал cпасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Информация] Вопрос знатокам UCP CS:S
|
Amir:D |
Общение и обсуждение Counter-Strike |
4 |
08.04.2012 06:18 |
[Помогите!] Вопрос к знатокам
|
esanja26 |
Общение и обсуждение |
5 |
10.02.2012 01:19 |
Вопрос знатокам
|
romana |
Боты, скрипты и прочий софт для Lineage 2 |
9 |
21.06.2009 18:50 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 05:56.
|
|