русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Вызов по ссылке и по значению


Дата добавления: 2014-06-06; просмотров: 641; Нарушение авторских прав


Список параметров, задаваемый в заголовке процедуры и функции, обеспечивает связь подпрограммы с вызывающей программой. Через него в подпрограмму передаются исходные данные и возвращается результат. При этом предусмотрены два принципиально отличающихся механизма передачи параметров – по значению и по ссылке. Синтаксически эти два способа отличаются употреблением слова var перед соответствующей переменной в заголовке подпрограммы. Если это слово имеется, переменная передаётся по ссылке, если нет – по значению.

При вызове по значению в подпрограмме создаются переменные, в соответствии с объявлениями в заголовке подпрограммы. Эти переменные существуют только на время выполнения подпрограммы. В вызывающей программе в качестве аргумента (фактического параметра) может использоваться не только переменная, но и выражение. В начале выполнения подпрограммы значение этой переменной или выражения присваивается внутренней временной переменной подпрограммы. Когда подпрограмма завершается , используемые подпрограммой переменные не сохраняют своего значения, поэтому передачу данных по значению можно использовать только для передачи данных в подпрограмму, но не для получения от неё результатов.

При вызове по ссылке в подпрограмме память под передаваемые переменные не отводится. Основная программа передаёт в подпрограмму не значение переменной, а ссылку на место в памяти основной программы, где расположена эта переменная. Подпрограмма, производя некоторые действия с этой переменной, в действительности производит действия с переменной основной программы, поэтому после выполнения процедуры изменения, совершенные с переменными основной программы, сохраняются. Этот механизм используется для получения от подпрограммы результатов её выполнения. Понятно, что при вызове подпрограммы с передачей данных по ссылке невозможно использовать в качестве аргументов выражения или константы, так как они не имеют адреса для передачи.



 

 

Лекция №7

Рассмотрим несколько примеров подпрограмм, в которых используются обращения по значению и по ссылке.

Пример 2.

 

program exzempl2;

var a,b:char;

procedure p(x:char;var y:char);

begin

a:='+';

y:=x

end;

procedure q(var x,y:char);

begin

a:='+';

y:=x

end;

{ *********** main program *********** }

begin

a:='*'; p(a,b);

writeln(a,' ',b);

a:='*'; q(a,b);

writeln(a,' ',b);

end.

В первом случае будет напечатано

 

При первом обращении к процедуре p создается локальная переменная x, куда закачивается значение переменной a, представляющее в этот момент символ ‘*’. Изменение же параметра y приводит к изменению по адресу совпадающим с адресом переменной b. Изменение глобальной переменной а с символа * на символ + происходит в теле подпрограммы уже после того как в локальную переменную х было записано значение *.

Во втором случае будет напечатано

 

При втором обращении к процедуре q для х передаётся адрес переменной а, для у передается адрес переменной b.

 

Поэтому изменение в теле подпрограммы значения а на символ + приводит к тому, что у, а следовательно и b изменяется на значение +.

Пример 3

program exzampl3;

uses crt;

var a,b:integer;

function f(x:integer):integer;

begin f:=x; a:=0 end;

function g(var x:integer):integer;

begin g:=x; x:=0 end;

{ ********* main program ********** }

begin

ClrScr;

a:=1; writeln(' 1) ',a+f(a));

writeln(' 2) ',f(a)+a);

b:=2; writeln(' 3) ',g(b)=g(b))

end.

Пример 4.

program exzampl4;

var c:char;

procedure p(x,y:char);

begin

y:=succ(x)

end;

procedure q(x:char;var y:char);

begin

y:=succ(x)

end;

{ ********** main program *********** }

begin

c:='+'; p('2',c);

writeln(' 1) ',c);

c:='+'; q('2',c);

writeln(' 20 ',c)

 

end.

 

Пример 5.

program exzampl5;

var a,b,c:integer;

procedure p(var x,y:integer);

var c:integer;

begin

c:=x; x:=y; y:=c

end;

procedure q(var x,y:integer);

begin

c:=x; x:=y; y:=c

end;

{ ********** main program ************ }

begin

a:=1; b:=2; c:=3;

p(a,b); writeln('a=',a,' b=',b,' c=',c);

a:=1; b:=2; c:=3;

q(a,b); writeln('a=',a,' b=',b,' c=',c);

end.

 

Пример 6.

program exzampl6;

var a:integer;

function f(x:real):real;

begin

f:=x;

if x<0 then f:=f+1

end;

procedure p(var x,y:real);

begin

x:=x*y

end;

{ ********** main program ************* }

begin

p(a,f(-7)); writeln('a=',a)

end.

 



<== предыдущая лекция | следующая лекция ==>
Лекция №6 Турбо Паскаль | Тема: Выбор в условиях неопределенности


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.385 сек.