|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2011, 21:07 | #1 |
Регистрация: 04.02.2010
Сообщений: 5
|
Изменение переменной в процедуре
Делаю так
Код:
Код:
Код:
Почему из первоначального TStringList удаляется строка и как сделать чтобы не удалялась? Последний раз редактировалось onkofe; 06.11.2011 в 21:13. |
06.11.2011, 21:13 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Код:
и var там не надо. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.11.2011, 21:15 | #3 |
Регистрация: 04.02.2010
Сообщений: 5
|
И как быть тогда?
Ведь наверное если бы я хотел удалить строку из List1, я бы не стал вызывать для этого функцию Test() Последний раз редактировалось onkofe; 06.11.2011 в 21:20. |
06.11.2011, 21:20 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вам надо чтоб передалась компия объекта?
руками создавайте копию, и через Assign сравняйте их(для TStrings(и потомков) работает) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.11.2011, 21:23 | #5 |
Регистрация: 04.02.2010
Сообщений: 5
|
я изучаю различие в передачи параметров в функцию
procedure TForm1.Test(X1: TstringList); procedure TForm1.Test(var X1: TstringList); procedure TForm1.Test(out X1: TstringList); procedure TForm1.Test(const X1: TstringList); |
06.11.2011, 21:31 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы бы сначало изучили что такое объекты(class) и как они хранятся.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.11.2011, 21:50 | #7 |
Регистрация: 04.02.2010
Сообщений: 5
|
В книге черным по белому написано что при передаче по значеню значение аргументов копируется и на этом связь между аргументами и переменными разрывается.
Но как видим на деле ничего подобного не происходит... |
06.11.2011, 21:52 | #8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
объекты хранятся по указателю на данные, потому копируется этот указатель.
объекты это вам не рядовая переменная. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.11.2011, 22:04 | #9 |
Регистрация: 04.02.2010
Сообщений: 5
|
то есть только таким образом?
Код:
|
06.11.2011, 22:44 | #10 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
да, правда тут особо смысла нет, но по крайней мере исходный обьект не меняется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменение переменной в Timer | Welotirit | Общие вопросы Delphi | 6 | 13.03.2011 19:27 |
Изменение переменной | Алексей_xXx | Общие вопросы C/C++ | 1 | 11.12.2009 10:49 |
преобразование переменной AnsiString в PAnsiChar для использования в процедуре loadlibrary | The Best | Общие вопросы Delphi | 2 | 12.07.2009 20:42 |
Изменение переменной | Ant1Player | PHP | 8 | 30.03.2009 22:07 |
Изменение переменной | yura-cat | Помощь студентам | 7 | 20.09.2008 17:42 |