Program Global;

Uses CRT;

Var a, b, c, s : Integer; с -глобальная переменная

Function Sum(x, y : Integer) : Integer;

Begin

c := c + 1; изменение значения глобальной

Sum := x + y + c; переменной в функции

End;

Begin

a := 1;

b := 1;

c := 1; инициализация глобальной переменной

s := c + Sum(a, b);

WriteLn(‘s=’, s);

ReadLn;

End.

После выполнения этой программы s = 5.

Следует избегать использования глобальных переменных в функциях, так как это может привести к непредсказуемым результатам вычислений. В предыдущем примере значение переменной s определялось оператором присваивания:

s := c + Sum(a, b);

и принимало значение s = 5. Поменяем местами слагаемые в этом операторе присваивания:

s := Sum(a, b) + c;

Казалось бы, результат измениться не должен, но после вычислений получим
s = 6 - значение глобальной переменной c изменилось внутри функции и стало равным с = 2, и с таким значением оно было добавлено в общую сумму в вызывающей программе.

Локальные и глобальные переменные размещаются в оперативной памяти в различных сегментах (частях). При трансляции программы формируются:

· сегмент кода, в котором хранится программа в виде машинных команд,

· сегмент данных, в котором выделяется память под глобальные переменные,

· сегмент стека, предназначенный для размещения локальных переменных:

 

 

Размер каждого сегмента не может превышать 64Кбайт. Адреса сегментов хранятся во время выполнения программы в сегментных регистрах:

CS – адрес сегмента кода,

DS – адрес сегмента данных,

SS – адрес сегмента стека.

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

· время жизни глобальных переменных – от начала работы программы до ее завершения,

· если глобальные переменные не были инициализированы явным образом, то есть им не были присвоены начальные значения, то перед началом работы программы они обнуляются,

· время жизни локальных переменных – с момента вызова подпрограммы и до ее окончания,

· значения локальных переменных между двумя вызовами одной и той же подпрограммы не сохраняются,

· неинициализированные локальные переменные предварительно не обнуляются, а принимают произвольные значения, зависящие от информации, оставшейся в занимаемых ими ячейках памяти,

· если переменная внутри подпрограммы определена в разделе описания константConst , то память под нее выделяется не в сегменте стека, а в сегменте данных, причем начальное значение ей присваивается один раз до начала работы программы, а не при входе в подпрограмму:

Function Func(k: Word) : Word;

Const n: Word = 0; n – типизированная константа

Var i: Word;

Begin

WriteLn(‘i=’,i); неопределенное значение переменнойi

WriteLn(‘n=’,n);

n:= n + k;

Func:=n;

End;

Переменной i будет присвоено заранее неизвестное значение. При первом обращении к функции переменная n, определенная в CONST, будет равна нулю, и при каждом последующем обращении она будет увеличиваться на k.

· время жизни такой переменной – время работы всей программы: значения этой переменной сохраняются между вызовами подпрограммы,

· область действия такой переменной – подпрограмма, в которой она описана, то есть вне подпрограммы к этой переменной обратиться нельзя,

10. локальные и глобальные переменные могут совпадать по имени; в этом случае в функции работают локальные переменные,

11. в качестве формальных параметров функций можно использовать имена переменных любого типа, имена массивов, множеств, файлов, записей, комбинированных структур, а также имена ранее определенных функций;

в качестве формальных параметров функций нельзя использовать конкретные значения (числа, символы), элементы массивов, поля записей, выражения и стандартные функции,

12. в качестве фактических параметров функций можно использовать константы, переменные, имена и элементы массивов, множеств, файлов, имена и поля записей, комбинированных структур, а также выражения, стандартные функции и имена ранее описанных функций,

13. значения входных (фактических) параметров функций не изменяются, даже если соответствующие им формальные параметры изменяются внутри функции; такие не изменяющиеся функцией входные переменные называются параметрами-значениями. При использовании параметров-значений в функцию передаются не сами фактические параметры, а их копии. Поэтому сами параметры остаются всегда неизменными:








Дата добавления: 2015-08-08; просмотров: 630;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.