Форум: "Начинающим";
Текущий архив: 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.042 c