Локальные переменные.
Переменные, определенные в теле функции – это локальные переменные. Область видимости такой переменной – функция, к ней могут обращаться только операторы тела функции. Время жизни такой переменной от входа до выхода из функции, при входе в функцию – переменная создается, а при выходе из функции – уничтожается.
Пример 2: Функция находит максимальное значение из двух целых чисел
...
int max (int a, int b) // a, b - формальные параметры
{ //------------------------ тело функции
int r; // локальная переменная r
if (a>=b) r=a;
else r=b;
return (r); // Возврат результата
}
void main()
{ int x=4, y=10, big;
// Вызов функции max, x,y - фактические параметры
big = max (x,y);
printf ("big=%d\n", big); // big=10
printf ("r=%d\n", r); // ошибка, переменной r уже нет!!!
}
При вызове формальные параметры функции max() инициализируются фактическими значениями: a =4 b =10
После окончания работы возвращаемое значение передается в точку вызова функции, значение локальной переменной r, возвращенное функцией max () возникает справа от знака присваивания в операторе big = max (x,y);
Статические переменные.
Статические переменные могут быть использованы в теле функции. В отличии от локальных, статические переменные создаются и инициализируются при первом входе в функцию и сохраняются на протяжении выполнения всей программы. Статические переменные в определении функции используются в том случае, если нужно сохранять результат вычислений между вызовами функций.
Пример 3: Использование статических переменных в определении функции.
#include <stdio.h>
// определение функции plus1()
void plus1()
{static int x=0;//инструкция выполняется один раз
int y=0; // выполняется при каждом вызове
x=x+1;
y=y+1;
printf("x=%d, y=%d \n",x,y);
} // переменная y уничтожается, переменная x сохраняется
void main()
{plus1();
plus1();
y++; // переменной y уже нет (будет ошибка!)
plus1();
x++; // переменная х существует, но не видна здесь (будет ошибка!)
}
Инструкция х=0 (в теле функции) выполняется только один раз, при первом вызове функции plus1(). Поскольку переменная х сохраняется,происходит её увеличение на единицу при каждом вызове функции.
Локальная переменная y создается каждый раз заново при вызове функции plus1(), при выходе из функции она уничтожается, и поэтому её значение не сохраняется между вызовами функции.
В результате работы программы, на экране будет напечатано:
При 1-ом вызове х=1, y=1
При 2-ом вызове х=2, y=1
При 3-ем вызове х=3, y=1