Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Вниз

Параметры функций   Найти похожие ветки 

 
DenisNew   (2007-02-09 14:49) [0]

Добрый день.
Помогите пожалуйста понять каким образом параметры функций передаются. К примеру, есть функция

function EnumValues(const Param1: Boolean; var Param2: Word; Param3 : integer): boolean

Что такое "const", "var", и просто Param3 без никакого объявления?
Мое представление:
const Param1- параметр передается как есть и изменять его нельзя внутри этой функции.
var Param2 - этот параметр можно изменять, причем после его изменения он будет возвращен в ту функцию, которая вызывала функцию EnumValues.
Param3 - параметр скопируется в функции EnumValues и с ним можно проводить любые операции и только в самой EnumValues.

Вот с этими еще вроде более менее мне ясно.
Но когда я вижу в параметрах функций указатели с такими объявлениями const и var, мне становится совсем не ясно зачем оно.
к примеру :
procedure SetForm(const aForm: TForm);
почему const? имелось в виду что параметры формы изменять нельзя или же чтобы избежать копирования формы, с теми мыслями, что будет медленее без const?

А в этих процедурах что имеется в виду?
procedure WriteSome(const lpBuffer: Pointer);
procedure WriteSome2(var lpBuffer: Pointer);

Спасибо.


 
Игорь Шевченко ©   (2007-02-09 15:02) [1]


> А в этих процедурах что имеется в виду?
> procedure WriteSome(const lpBuffer: Pointer);
> procedure WriteSome2(var lpBuffer: Pointer);
> procedure WriteSome2(lpBuffer: Pointer);


в первой процедуре внутри нее параметру lpBuffer нельзя присваивать значение.
во второй процедуре, значение, присвоенное в вызываемой процедуре параметру lpBuffer будет видно в вызывающей процедуре.
в третьей процедуре (это уже я добавил), значение переменной lpBuffer в вызываемой процедуре присваивать можно, но оно не будет видно в вызывающей процедуре.


 
Сергей М. ©   (2007-02-09 15:21) [2]


> почему const?


А бог его знает, что такое в дан.случае TForm)

Если TForm - это идентификатор класса, то по барабану, имется там префикс const или нет его.


> А в этих процедурах что имеется в виду?


procedure WriteSome(const lpBuffer: Pointer);

В процедуру передается копия значения неких данных указательного типа, изменять копию незьзя.

procedure WriteSome2(var lpBuffer: Pointer);

В процедуру передается копия адреса местонаходнения в памяти значения неких данных указательного типа, имея этот адрес можно изменять данные по этому адресу


 
Desdechado ©   (2007-02-09 15:25) [3]

> procedure SetForm(const aForm: TForm); почему const? имелось
> в виду что параметры формы изменять нельзя или же чтобы
> избежать копирования формы, с теми мыслями, что будет медленее без const?
Это означает, что подменить форму другой в процедуре нельзя, а вот ее параметры менять можно, т.к. объекты передаются по ссылке.


 
DenisNew   (2007-02-09 15:32) [4]

Теперь понял. Спасибо большое.


 
Игорь Шевченко ©   (2007-02-09 15:35) [5]


> Если TForm - это идентификатор класса, то по барабану, имется
> там префикс const или нет его.


Не по барабану


 
Loginov Dmitry ©   (2007-02-09 16:15) [6]

> А в этих процедурах что имеется в виду?
> procedure WriteSome(const lpBuffer: Pointer);
> procedure WriteSome2(var lpBuffer: Pointer);


В обеих процедурах передается одинаковым способом одно и то же значение (по ссылке). Однако модификатор const предписывает компилятору пресекать попытки изменения переменной lpBuffer. В некоторых случаях компилятор и вовсе может сгенерировать разный код в зависимости от наличия var, const и без оных. Поэтому например при передаче строки в процедуру (если изменять ее там не нужно), нужно использовать const. Другие варианты при обработке строки спровоцируют либо генерацию более медленного кода (при использовании var), либо заставять создать копию переданной строки (если не использовать модификаторы).



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

Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
15-1170533431
Norfolk
2007-02-03 23:10
2007.02.25
Создание БД Paradox в Delphi 2006


2-1170006217
познающий
2007-01-28 20:43
2007.02.25
Русский текст в анг. винде


2-1170943484
Volfram
2007-02-08 17:04
2007.02.25
DelphiX, TDXimageList RunTime Creation


4-1160766541
gellmar
2006-10-13 23:09
2007.02.25
Как реализовать парсинг PE64 файлов под win32 на делфи?


11-1143716182
Боб
2006-03-30 14:56
2007.02.25
Архив конференции KOL





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