Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

Передача параметров в процедуру/функцию   Найти похожие ветки 

 
velial   (2003-12-16 11:56) [0]

Вопрос такой:
как правильнее передать в процедуру или функцию параметры?
1. по значению, т.е. когда передача идет из главного модуля в процедуру попадает такое же значени, но при этом изменение переменной внутри процедуры не сказывается на основной переменной
2. по ссылке, т.е. с возможностью изменения?

вопрос2: как передать в процедуру/функцию массив, причем динамический? только по ссылке?

может уже кто сталкивался с такой проблемой?


 
Skier ©   (2003-12-16 11:59) [1]


> как правильнее передать в процедуру или функцию параметры?

оба варианта правильные.



> вопрос2: как передать в процедуру/функцию массив, причем
> динамический? только по ссылке?

объявить тип (примерно : type TStringArray = array of string;)


 
Reindeer Moss Eater ©   (2003-12-16 12:02) [2]

вопрос2: как передать в процедуру/функцию массив, причем динамический? только по ссылке?

А они в принципе не по ссылке могут вообще передаваться?


 
KSergey ©   (2003-12-16 14:09) [3]

С такой проблемой лично я не сталкивался ;)
Просто все зависит от ситуации: хочешь менять - передавай по ссылке (а как иначе??), необходимо модифицировать, но не менять значение исходной переменной - по значению.

Но при этом не забывать, что передача по ссылке - это передача лишь указателя, размер которого наверняка меньше размера передаваемой структуры (переменный Integer передавать по ссыоке нет смысла, вернее - экономии ;)
И еще. Если для параметра указано Const, то реально он передается по ссылке (для скорости опять же), но компилятор (именно компилятор!) пресекает все попытки его изменения.

Так где же здесь все-таки проблема?


 
y-soft ©   (2003-12-16 14:23) [4]

>KSergey © (16.12.03 14:09) [3]

Действительно, const при передаче параметров слабая защита.
Всегда можно получить адрес параметра, разыменовать и делать с ним что угодно - компилятор будет молчать. Только мало кто так извращается :)


 
y-soft ©   (2003-12-16 14:43) [5]

Есть еще один аспект subj

В WinAPI многие функции позволяют передавать nil вместо параметра, но в Windows.pas эти параметры по каким-то резонам определены как var, т.е. приходится объявлять ненужную переменную и инициализировать ее, а в некоторых случаях даже объявлять другой прототип для функции, что не есть удобно.

Т.е. если параметр может принимать значение nil, то и надо явно передавать указатель, а не var...


 
Anatoly Podgoretsky ©   (2003-12-16 14:53) [6]

y-soft © (16.12.03 14:43) [5]
А зачем ты переменную объявляешь?


 
KSergey ©   (2003-12-16 14:58) [7]

> [4] y-soft © (16.12.03 14:23)
> Действительно, const при передаче параметров слабая защита.

Безусловно! Я потому и подчеркнул, что все проверки лишь на уровне компилятора.
Однакоже считаю, что не стоит забывать, что передача идет по ссылке, что, в определенных случаях, ускоряет вызов. Если это допустимо, конечно.



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
4-99814
Дубинин Алексей
2003-10-31 21:55
2003.12.30
Как определить какое приложение запускается


1-99559
Sol-ZanuFF
2003-12-17 15:43
2003.12.30
Проблемы с печатью


1-99545
smu
2003-12-16 11:23
2003.12.30
Как обрабатывать события невизуальных компонентов?


14-99783
RainKM
2003-12-09 14:57
2003.12.30
com


1-99616
g-l-u-k
2003-12-16 21:48
2003.12.30
Последние файлы