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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
6-4530
Artemkin
2002-09-26 18:15
2002.12.02
Как прочитать файл с другого компа в лок. сети?


1-4403
Михич
2002-11-18 07:44
2002.12.02
Next Tab


14-4589
nick_vstu
2002-11-12 10:48
2002.12.02
Linux -rules forever!


1-4328
DN
2002-11-21 14:21
2002.12.02
Ошибка при работе приложения


3-4257
AlexA
2002-11-12 13:14
2002.12.02
Триггеры и целостность данных в IB





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