Главная страница
    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.47 MB
Время: 0.044 c
15-1170415324
stud
2007-02-02 14:22
2007.02.25
виснет ibexpert при старте


8-1148858988
452
2006-05-29 03:29
2007.02.25
Создание видео файлов (avi,vob,wmv,mpeg4)


9-1144856075
Ермак
2006-04-12 19:34
2007.02.25
1) OpenGL и DirectShow 2) COM TLB для DirectX


6-1158231851
Alexander_K
2006-09-14 15:04
2007.02.25
Как программно подконнектится?


15-1169912382
Ringo
2007-01-27 18:39
2007.02.25
Геополитка типа. А зачем нам Сербия? Болгария? Хуже предать, кто





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