Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 23:30   #1
KpecTHbIi
 
Регистрация: 13.07.2011
Сообщений: 6
По умолчанию какая разница между const var и без ничего в процедуре

буду очень благодарен, если вы мне объясните какая разница между
const var и без ничего в процедуре.
вот пример.

procedure lalala(x,y: integer);
begin
....
end;

procedure lalala(var x,y: integer);
begin
....
end;

procedure lalala(const x,y: integer);
begin
....
end;
KpecTHbIi вне форума Ответить с цитированием
Старый 10.01.2012, 23:53   #2
Serj0987
Пользователь
 
Регистрация: 18.04.2009
Сообщений: 44
По умолчанию

Код:
procedure lalala(x,y: integer);
значения x,y можно менять в теле процедуры, но эти изменения действуют только внутри процедуры и никак не отражаются на фактических параметрах

Например
Код:
procedure lalala(var x,y: integer);
если значение x или y меняется гдето в теле процедуры, то после вызова например
Код:
lalala(a,b);
значения a и в изменятся, такой прием не редко используется когда надо вернуть из процедуры несколько значений.
Код:
procedure lalala(const x,y: integer);
в теле процедуры запрещено изменять значения x,y
Программы на заказ Delphi, Pascal, PHP.
ICQ:636-494-826
E-mail:serj0987@yandex.ru.

Последний раз редактировалось Serj0987; 10.01.2012 в 23:56.
Serj0987 вне форума Ответить с цитированием
Старый 11.01.2012, 20:37   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Всё верно, небольшое уточнение:Данные передаются в п/п через стек!
Через этот стек можно передать в п/п как сами значения, так и адреса сегмента данных, по которым размещены эти значения.
При передаче только значений, п/п не получает адреса по которым эти значения размещены и не может их изменить:
<переменная>:<тип>.
Вместо значений можно записывать выражения, которые вычисляются, а результат вычисления передаётся в п/п.

При передаче адреса п/п знает место размещения данных в сегменте данных и может их изменять. Это позволяет вычислять значения в п/п и возвращать результат вычисления в программу:
Var <переменная>:<тип>.
Такой способ хорош, когда в п/п формируется сложный тип данных: массив, запись,...
Этот способ не всегда хорош, поскольку в сложных случаях можно написать код, который испортит исходные данные.

Для защиты таких данных, которые не желательно портить, адрес области их размещения передаётся через стек структурой:
Const <переменная> : <тип>.
Компилятор контролирует способ передачи данных и при попытке написания кода, изменяющего содержание таким образом описанной переменной, выдаст ошибку.
Существует и такой способ передачи адреса, когда компилятор контролирует возможность чтения данных. Т.е. писать данные в переменную можно, а прочитать содержимое - нельзя! Для такого случая используется другое "волшебное словечко" :-)
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какая разница в двух строках? bullvinkle HTML и CSS 2 07.12.2009 18:17
Какая разница в css между id и class? Красавчег))) HTML и CSS 6 05.08.2008 14:44
Какая разница между MS Visual и C++ Fanta_Clour Софт 2 09.03.2008 18:33
Какая разница,между ClientSockets и ServerSockets или [indy] T andrey4623 Компоненты Delphi 3 18.08.2007 03:29