Форум: "Основная";
Текущий архив: 2003.12.30;
Скачать: [xml.tar.bz2];
ВнизПередача параметров в процедуру/функцию Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c