int арг1, int арг2, int
имя_функции(..., ..., ....) арг1 арг2 арг3
в месте вызова функции.
То есть
ОПИСАНИЕ ФУНКЦИИ:
int f( int арг1, int арг2, int арг3){ int перем1, перем2; ... /* продолжение */ }
ВЫЗОВ:
.... f(выражение1, выражение2, выражение3) ...
ТО В ТЕЛЕ ФУНКЦИИ ВЫПОЛНИТСЯ (в момент ее вызова):
арг1 = выражение1; арг2 = выражение2; арг3 = выражение3;
перем1 = МУСОР; перем2 = МУСОР;
... /* продолжение */
ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ =====================
Наконец, существуют переменные, которые объявляются ВНЕ ВСЕХ ФУНКЦИЙ, и существующие все время выполнения программы (а не только то время, когда активна функция, в которой они созданы).
Локальные переменные и аргументы УНИЧТОЖАЮТСЯ при выходе из функции. Глобальные переменные - нет.
int x = 12; /* ::x - ей можно заранее присвоить константу */ int globvar; /* ::globvar */
int f1(){ int x; /* f1::x */
x = 77; printf("x=%d\n", x); /* 4 */ return x; }
int f2(){ printf("x=%d\n", x); /* 5 */ return 0; }
void main(){ int x, y; /* main::x */
x = 111; /* 1 */ printf("x=%d\n", x); /* 2 */ printf("glob=%d\n", globvar); /* 3 */
y = f1(); y = f2(); }
В данном примере мы видим: - во-первых мы видим ФУНКЦИИ БЕЗ ПАРАМЕТРОВ. Это нормальная ситуация. - во-вторых тут используются ТРИ переменные с именем "x".
Как выполняется программа?
/* 1 */ main::x = 111; Это локальный x, а не глобальный. Глобальный x попрежнему содержит 12.
/* 2 */ Напечатает значение переменной main::x, то есть 111. Внутри функции main глобальная переменная ::x заслонена своей собственной переменной x. В данном случае НЕТ СПОСОБА добраться из main к глобальной переменной x, это возможно только в языке Си++ по имени ::x
К переменной же globvar у нас доступ есть.
/* 3 */ Печатает ::globvar. Мы обнаруживаем, что ее значение 0. В отличие от глобальных переменных, которые изначально содержат МУСОР, глобальные переменные изначально содержат значение 0.
В рамочку, подчеркнуть.
/* 4 */ При вызове f1() переменная f1::x заслоняет собой как main::x так и ::x
Содержание Назад Вперед