Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

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

 
Comp ©   (2002-11-22 16:23) [0]

Мужики, вопрос конечно детский, но тем не менее я до сих пор не пойму, в чём различие между параметрами-"константами" и параметрами-"значениями" процедур и функций.
Вот смотрите
var
S,s1,s2,s3: string;
.........


function MyFunc( const x:string):string;
begin
.............

end;


begin
s1:=s3+s2;

S:=MyFunc(s1)+s2;

....................

end;




И такая функция работает!
Почему? Ведь у нас формальный параметр const!!!!
А мы используем сумму - значений переменных.


 
Anatoly Podgoretsky ©   (2002-11-22 16:27) [1]

Покажи где ты меняешь X, который ты объявил константой


 
Smithson ©   (2002-11-22 16:28) [2]

Что-то ты ошибся в примере, видимо. Где используется ( const x:string)?


 
Игорь Шевченко ©   (2002-11-22 16:28) [3]

Параметр типа 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."


 
Comp ©   (2002-11-22 16:35) [4]

Предполагается, что где-то в теле функции...
Но ведь тут несоответствие - var и const!!


 
Comp ©   (2002-11-22 16:38) [5]

Ведь по идее параметр Х не должен меняться, то есть соответствующий ему параметр из самой программы тоже не должен меняться А ведь у нас меняется. ПЕРЕменная!!!


 
Comp ©   (2002-11-22 16:39) [6]

Или мож я не так понял...
То есть меняться Х не должен в самой подпрограмме, а не в основной программе....


 
MBo ©   (2002-11-22 16:45) [7]

procedure X(A:integer; const B:Integer; var C:Integer);

А можешь менять в процедуре, это не повлияет на внешнюю переменную, которая использовалась при вызове - создается локальная для процедуры копия

B - не даст изменять компилятор. Про важность для строк уже сказали.

С можно менять, при этом поменяется и внешняя переменная, которая использовалась при вызове - поскольку используется алрес переменной, указатель на нее


 
Comp ©   (2002-11-22 16:49) [8]

Всё ясно...
Спасибо.


 
Digitman ©   (2002-11-22 16:51) [9]

В дополнение к <MBo>:

> procedure X(A:integer; const B:Integer; var C:Integer);


в теле процедуры
- А, B есть копия значения передаемого фактического параметра
- C есть копия адреса передаемого фактического параметра


 
TTCustomDelphiMaster ©   (2002-11-22 17:08) [10]


> Comp © (22.11.02 16:23)

x недолжно менятся в самой процедуре, т.е. не длжно быть таких выражений
x := x+"...";
И все.


 
Anatoly Podgoretsky ©   (2002-11-22 17:16) [11]

К строке это не относится, во первых здесь меняется значение строки, как бы X^, а модификатор относится к переменной X


 
Всем спасиба   (2002-11-22 17:36) [12]

Comp



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

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-4477
котел
2002-11-20 13:26
2002.12.02
помощь


6-4550
Alex_ustasu
2002-10-03 17:19
2002.12.02
ClientSocket не видит ServerSocket, если указан Service


14-4628
Николай Быков
2002-11-12 10:21
2002.12.02
Почему вы так грубы?


4-4660
VEG
2002-10-19 19:34
2002.12.02
У меня проблема


3-4220
jen_bond
2002-11-13 21:39
2002.12.02
Ежесекундное обнавление данных