Главная страница
    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
11-99510
BaRToV
2003-04-14 17:13
2003.12.30
FindWindow и KOL


3-99504
Denisiy
2003-12-04 12:30
2003.12.30
Странная вещь в работе с таблицей через TTable.... не понимаю...


3-99446
Kott
2003-12-06 03:59
2003.12.30
Пропустить повторения.


1-99532
Maxim Vetera
2003-12-15 19:24
2003.12.30
Заплутал в разделе Const :(


3-99447
Алексей_
2003-12-05 22:58
2003.12.30
сохранение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский