![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
StepRu |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Подскажите пожалуйста
и
В чём у них разница? Ведь M:TMemoryStream уже является указателем на объект, но если поставить VAR - что измениться? Пожалуйста, дайте обоснованный ответ! с указанием на источник. |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
чем то это напоминает кусок экзаменационного билета ;) источник - любой учебник по паскалю с объяснением передачи параметров. в первом случае параметр передается по ссылке и его значение можно изменить внутри процедуры. во втором - по значению. т.е. изменение его внутри процедуры не приведет к изменению вне ее. Это сообщение отредактировал(а) MetalFan - 15.8.2007, 14:17 -------------------- There are always someone smarter than you... |
|||
|
||||
StepRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Неа, это относиться не к классам =( Вот если бы там был не TMemoryStream а Integer, то вопросов бы не возникло.
процедура m без проблем меняет внешний объект как с Var, так и без него. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
StepRu, изменяет части объекта, но не весь объект!
Попробуй
|
|||
|
||||
StepRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
ivashkanet А по какому принципу он эти части определяет? Например когда я юзал TMemoryStream и писал из процедуры во внешний объект методом WriteBuffer, то во внешнем объекте в начале всё было ок, но 40 байт он недописывал. Вар конечно усё исправил, но первые байты он почему то записал без Var =|
|
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
StepRu, ничего не понял.
Дельфи я не знаю. Просто это межъязыковой вопрос (в C# все точно так же). Суть в том, что при передаче по "ссылке" (val) мы можем модифицировать объект на который эта "ссылка" ссылается.
Если же мы передаём "по значению" (без var), то модифицировать ссылку на объект нельзя, зато можно модифицировать сам объект
|
||||
|
|||||
Yanis |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2937 Регистрация: 9.2.2004 Где: Москва Репутация: 72 Всего: 111 |
Она не меняет. Она тока вызывает пропертю Height, а уже она меняет. |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
с варом можно переписать ссылку ссылкой на другой объект
-------------------- Обижено школьников: 8 |
|||
|
||||
StepRu |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Млин =) Народ, я наверное плохо объясняю, но мне надо модифицировать внешний объект из процедуры, передав в неё ссылку на этот объект!
как вы видите, я внутри функции m никакой другой объект не присваиваю t. Кстати, фукция нормально пашет как с Var, так и без него, изменяя данные в памяти с помощью объекта MemStr, переданного в функцию. Так вот у меня вопрос в чём - что этот VAr делает, когда в качестве типа параметра указан класс? Он лишь позволяет ссылаться на другой объект внутри функции? Просто например если тип был бы Integer, то без Var он бы не изменился вне функции, а с классом он меняется! Так вот, как влияет VAR на внешний объект? из примера понял - что никак =/ PS. Был более сложный код, где записывались данные не однотипные, так вот там если не указать VAR, memStr не досчитался бы нескольких записей. PS 2. Кстати, если указать VAR, то взятие адреса @
вернёт естественно True. А вот если я Var не укажу, то ссылка на объект просто копируется? Но это никак не будет влиять на обращение к внешнему объекту и работу с его методами, свойствами, конструктором и деструктором? Просто реально был случай, когда без Var исчезало несколько байт в потоке памяти. Это сообщение отредактировал(а) StepRu - 15.8.2007, 16:25 |
||||
|
|||||
bems |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 31 Всего: 88 |
var нужен чтобы записать в переменную ссылку на новый объект. При изменении значений полей объекта сама ссылка остается неизменной и var не нужен но и не мешает.
Добавлено через 48 секунд
давай этот код, там и посмотрим Добавлено через 9 минут и 2 секунды
![]() ![]() -------------------- Обижено школьников: 8 |
||||||||
|
|||||||||
StepRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
bems
Спасибо огромное. Я понял в чём была ошибка - исправил усё. реально ступил в адресации, т.к. очень запутан проект и там действительно указатель передавать надо в главную программу ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |