Главная > Язык Си > Область видимости объектов и модификация
Область видимости объекта (переменной или функции) определяет набор функций или модулей, внутри которых допустимо использование имени этого объекта. Область видимости объекта начинается в точке объявления объекта.
Время жизни объекта может быть глобальным и локальным. Глобальными называют объекты, объявление которых дано вне функции. Они доступны (видимы) во всем файле, в котором они объявлены. В течение всего времени выполнения программы с глобальным объектом ассоциирована некоторая ячейка памяти.
Локальными называют объекты, объявление которых дано внутри блока или функции. Эти объекты доступны только внутри того блока, в котором они объявлены. Объектам с локальным временем жизни выделяется новая ячейка памяти каждый раз при осуществлении описания внутри блока. Когда выполнение блока завершается, память, выделенная под локальный объект, освобождается, и объект теряет своё значение.
Пример
#include <stdio.h> void autofunc(void) {
int k=1; // локальный объект
printf(" \n k = %d ", k);
k=k+1; } int main() {
for(int i = 0; i<=5; i++) // область видимости i - цикл
autofunc();
getchar();
return 0; }
Область видимости локальной переменной k - функция autofunc(). Каждый раз при входе в функцию с идентификатором k ассоциируется некоторая ячейка памяти, в которую помещается значение равное 1.
Результат выполнения программы Та же программа, но с использованием глобального объекта
#include <stdio.h> int k=1; // глобальный объект void autofunc(void) {
printf(" \n k = %d ", k);
k=k+1; } int main() {
for(int i = 0; i<=5; i++) // область видимости i - цикл
autofunc();
getchar();
return 0; }
Результат выполнения программы С помощью глобальных переменных можно организовать обмен информацией между функциями. При этом вызываемая функция не будет принимать значения глобальных переменных в качестве формальных аргументов. Однако в этом случае существует опасность случайного изменения глобальных объектов другими функциями.
Пример
#include <stdio.h> int x, y, z; // глобальные переменные void sum(void){