Главная страница
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.013 c
1-99529
чайник
2003-12-16 14:38
2003.12.30
Ошибка класса EDatabaseError


14-99753
i80486
2003-12-06 19:35
2003.12.30
-=


6-99690
LORDIK
2003-10-24 12:06
2003.12.30
NMStrmServ


6-99675
Addead
2003-11-02 18:21
2003.12.30
послать письмо на почту от...


4-99817
Sadya
2003-11-02 14:52
2003.12.30
Программно вызвать нажатие кнопки