![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметры процедур и функций.
Comp © (2002-11-22 16:23:00)Мужики, вопрос конечно детский, но тем не менее я до сих пор не пойму, в чём различие между параметрами-"константами" и параметрами-"значениями" процедур и функций.
Вот смотрите
var
S,s1,s2,s3: string;
.........
functionMyFunc( constx:string):string;
begin
.............
end;
begin
s1:=s3+s2;
S:=MyFunc(s1)+s2;
....................
end;
И такая функция работает!
Почему? Ведь у нас формальный параметр const!!!!
А мы используем сумму - значений переменных.
Всем спасиба (2002-11-22 17:36:00) [1]Comp
Anatoly Podgoretsky (2002-11-22 17:16:00) [2]К строке это не относится, во первых здесь меняется значение строки, как бы X^, а модификатор относится к переменной X
TTCustomDelphiMaster (2002-11-22 17:08:00) [3]
> Comp © (22.11.02 16:23)
x недолжно менятся в самой процедуре, т.е. не длжно быть таких выражений
x := x+"...";
И все.
Digitman (2002-11-22 16:51:00) [4]В дополнение к <MBo>:
> procedure X(A:integer; const B:Integer; var C:Integer);
в теле процедуры
- А, B есть копия значения передаемого фактического параметра
- C есть копия адреса передаемого фактического параметра
Comp (2002-11-22 16:49:00) [5]Всё ясно...
Спасибо.
MBo (2002-11-22 16:45:00) [6]procedure X(A:integer; const B:Integer; var C:Integer);
А можешь менять в процедуре, это не повлияет на внешнюю переменную, которая использовалась при вызове - создается локальная для процедуры копия
B - не даст изменять компилятор. Про важность для строк уже сказали.
С можно менять, при этом поменяется и внешняя переменная, которая использовалась при вызове - поскольку используется алрес переменной, указатель на нее
Comp (2002-11-22 16:39:00) [7]Или мож я не так понял...
То есть меняться Х не должен в самой подпрограмме, а не в основной программе....
Comp (2002-11-22 16:38:00) [8]Ведь по идее параметр Х не должен меняться, то есть соответствующий ему параметр из самой программы тоже не должен меняться А ведь у нас меняется. ПЕРЕменная!!!
Comp (2002-11-22 16:35:00) [9]Предполагается, что где-то в теле функции...
Но ведь тут несоответствие - var и const!!
Smithson (2002-11-22 16:28:00) [10]Что-то ты ошибся в примере, видимо. Где используется ( constx:string)?
Игорь Шевченко (2002-11-22 16:28:00) [11]Параметр типа const запрещает изменение значения параметра внутри функции. Для строк, в частности, это оптимизирует работу с ними...
"Using const allows the compiler to optimize code for structured- and string-type parameters. It also provides a safeguard against unintentionally passing a parameter by reference to another routine."
Anatoly Podgoretsky (2002-11-22 16:27:00) [12]Покажи где ты меняешь X, который ты объявил константой