| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Что делает VAR в процедуре |
| Автор: StepRu 15.8.2007, 14:09 | ||||
Подскажите пожалуйста
и
В чём у них разница? Ведь M:TMemoryStream уже является указателем на объект, но если поставить VAR - что измениться? Пожалуйста, дайте обоснованный ответ! с указанием на источник. |
| Автор: MetalFan 15.8.2007, 14:15 |
чем то это напоминает кусок экзаменационного билета ;) источник - любой учебник по паскалю с объяснением передачи параметров. в первом случае параметр передается по ссылке и его значение можно изменить внутри процедуры. во втором - по значению. т.е. изменение его внутри процедуры не приведет к изменению вне ее. |
| Автор: ivashkanet 15.8.2007, 14:49 | ||
| StepRu, изменяет части объекта, но не весь объект! Попробуй
|
| Автор: StepRu 15.8.2007, 15:04 |
| ivashkanet А по какому принципу он эти части определяет? Например когда я юзал TMemoryStream и писал из процедуры во внешний объект методом WriteBuffer, то во внешнем объекте в начале всё было ок, но 40 байт он недописывал. Вар конечно усё исправил, но первые байты он почему то записал без Var =| |
| Автор: ivashkanet 15.8.2007, 15:23 | ||||
| StepRu, ничего не понял. Дельфи я не знаю. Просто это межъязыковой вопрос (в C# все точно так же). Суть в том, что при передаче по "ссылке" (val) мы можем модифицировать объект на который эта "ссылка" ссылается.
Если же мы передаём "по значению" (без var), то модифицировать ссылку на объект нельзя, зато можно модифицировать сам объект
|
| Автор: Yanis 15.8.2007, 15:28 |
Она не меняет. Она тока вызывает пропертю Height, а уже она меняет. |
| Автор: bems 15.8.2007, 15:33 |
| с варом можно переписать ссылку ссылкой на другой объект |
| Автор: StepRu 15.8.2007, 16:04 | ||||
Млин =) Народ, я наверное плохо объясняю, но мне надо модифицировать внешний объект из процедуры, передав в неё ссылку на этот объект!
как вы видите, я внутри функции m никакой другой объект не присваиваю t. Кстати, фукция нормально пашет как с Var, так и без него, изменяя данные в памяти с помощью объекта MemStr, переданного в функцию. Так вот у меня вопрос в чём - что этот VAr делает, когда в качестве типа параметра указан класс? Он лишь позволяет ссылаться на другой объект внутри функции? Просто например если тип был бы Integer, то без Var он бы не изменился вне функции, а с классом он меняется! Так вот, как влияет VAR на внешний объект? из примера понял - что никак =/ PS. Был более сложный код, где записывались данные не однотипные, так вот там если не указать VAR, memStr не досчитался бы нескольких записей. PS 2. Кстати, если указать VAR, то взятие адреса @
вернёт естественно True. А вот если я Var не укажу, то ссылка на объект просто копируется? Но это никак не будет влиять на обращение к внешнему объекту и работу с его методами, свойствами, конструктором и деструктором? Просто реально был случай, когда без Var исчезало несколько байт в потоке памяти. |
| Автор: bems 15.8.2007, 16:25 | ||||||||
var нужен чтобы записать в переменную ссылку на новый объект. При изменении значений полей объекта сама ссылка остается неизменной и var не нужен но и не мешает.
Добавлено через 48 секунд
давай этот код, там и посмотрим Добавлено через 9 минут и 2 секунды
|
| Автор: StepRu 15.8.2007, 16:56 |
| bems Спасибо огромное. Я понял в чём была ошибка - исправил усё. реально ступил в адресации, т.к. очень запутан проект и там действительно указатель передавать надо в главную программу |