Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0  maximus © 07.06.05 08:10:34 - 07.06.05 12:33:03

Передача переменных в процедуру



кидаю на форму табле1, датасоурсе1, дбгрид1...
объявляю новую процедуру:
procedure aaa(tab: TTable);

вызываю процедуру по нажатию на ннекую кнопочку:
aaa(table1);

сама процедура ааа
Procedure tform1.aaa(tab: TTable)
begin
  table1.edit;
  table1.fieldbyname('pole').asstring := 'dfgd';
  table1.post;
end;


Вопрос: почему я могу изменить строку в табле1 если я передаю локальную копию табле1, или это для классов не работает??? Цитата

 #1  maximus © 07.06.05 08:12:11

прошу прощения процедура:
Procedure tform1.aaa(tab: TTable)
begin
 tab.edit;
 tab.fieldbyname('pole').asstring := 'dfgd';
 tab.post;
end;
 #2  dmitry501 07.06.05 08:32:09

#1 maximus ©   (07.06.05 8:12)
Потому что параметры передаются по ссылке, а не по значению.
 #3 Vlad © 07.06.05 08:35:24

мне кажется, что там передается не копия, а ссылка на таблу
 #4  maximus © 07.06.05 08:39:36

procedure aaa(tab: TTable);
procedure aaa(var tab: TTable);
procedure aaa(const tab: TTable);


без разницы... все равно ощущение такое что получается по ссылке!!!
 #5 Vlad © 07.06.05 08:55:53

ктр+альт+с говорит что код он во всех случаях одинаков
 #6 Vlad © 07.06.05 08:56:24

настройки компилятора по умолчанию
 #7  maximus © 07.06.05 09:08:24

Vlad#5#6 - поясни.

для обычных переменных (string, integer...) все работает как и должно... а от для ttable почему то...
 #8 deep © 07.06.05 09:13:57

> если я передаю локальную копию табле1
для того чтоб передавать копию, ее надо сначало создавать. Если новый объект не создается, значит мы уже имеем дело с указателем на оригинал.
Так где у тебя tab := TTable.Create(....); ?
Нету.
1)Значит это не копия
2)Даже добавляя строку в копии, ты добавляешь ее в оригинал. Физически это ведь одна и та же таблица.
 #9 Vlad © 07.06.05 09:24:16

>#7 maximus © 07.06.05 09:08:24
> Физически это ведь одна и та же таблица.
которую ты бросил на форму

> Vlad#5#6 - поясни.
генерацию исп. кода проверяют заглянув в окошко компилятора, ставится точка останова, и когда программа останавливается, жмут ктр+альт+с, и смотрят как будет преобразован *.раз в маш.код
иногда компилятор делает как он считает нужным, а не как задумано. Это оптимизация.
но, см. Дипа, тут даже не оптимизация, а просто так надо :)

в твоем случае во всех разах одинаков, смотрел сам
 #10  maximus © 07.06.05 11:10:38

#8 deep
2)Даже добавляя строку в копии, ты добавляешь ее в оригинал. Физически это ведь одна и та же таблица.

тогда выходит что с самого начала я делал все правильно?
 #11 deep © 07.06.05 12:33:03

> тогда выходит что с самого начала я делал все правильно?
откуда нам знать?  а что ты хотел сделать?
если передать переменную -- то направильно. Ты передал ссылку на объект. Если добавить строку в таблицу -- то правильно.




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов