Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-99784
Knight
2003-12-05 12:26
2003.12.30
Почему TStringGrid такой недоделанный?


8-99649
Novenkij
2003-08-26 18:54
2003.12.30
Как сделать изображения чёрно-белым


3-99505
Talle
2003-12-07 18:58
2003.12.30
Проблема.Передать знач-е ключ. поля сразу после append в др табл


1-99602
axx
2003-12-17 13:04
2003.12.30
Подскажите как выгрузить содержимое Array of Byte


14-99751
VID
2003-12-06 22:09
2003.12.30
что за неполадки с билайновским GPRS-INTERNET ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский