Область видимості змінних
Область видимості - це частина програми, в межах якої можна використовувати змінну.
Як правило, область видимості обмежується блоком коду, який знаходиться у фігурних дужках.
Залежно від області видимості створювані об'єкти можуть бути глобальними або локальними.
Глобальні змінні
Глобальні змінні описані в програмі поза будь-якої функції і можуть використовуватися будь-якою функцією.
У даній програмі змінна n є глобальною і доступна з будь-якої функції.
При цьому будь-яка функція може змінити її значення.
Результат:
Локальні змінні
Змінні, які створюються всередині блоку (всередині фігурних дужок), називаються локальними.
Такі змінні доступні в межах тільки того блоку коду, в якому вони визначені.
Блок може представляти функцію або будь-яку іншу конструкцію типу циклу.
Тут у функції print визначена локальна змінна n. У функції main визначена локальна змінна z. Поза своїх функцій ці змінні недоступні.
Наприклад, ми не можемо використовувати змінну n в функції main, так як її область видимості обмежена print.
Відповідно також ми не можемо використовувати змінну z в функції print, так як ця змінна обмежена main.
Параметри функції також, як і локальні змінні, існують, поки виконується функція, поза функції вони не доступні.
Область видимості змінних
За допомогою блоку коду можна визначити вкладені області видимості:
Для кожної області видимості доступні всі ті об'єкти, які визначені у зовнішній області видимості або в зовнішньому контексті.
Глобальний контекст є зовнішним для функції, тому функція може використовувати глобальні змінні.
А функція є зовнішнім контекстом для вкладеного блоку коду, тому блок коду може використовувати змінну n, яка визначена в функції поза цим блоку.
Однак змінну x, описану в блоці коду, поза цим блоку використовувати не можна.
Приховування змінних
Локальні змінні, визначені всередині одного блоку, можуть приховувати змінні з тим же ім'ям, що описані в зовнішньому блоці:
Тут визначено три змінних з ім'ям n.
Змінна n, що описана у функції main (int n = 10;) приховує глобальну змінну n = 5.
А змінна n=20, що описана у блоці, приховує змінну n, описану у функції main.
Автоматичні змінні
Локальні змінні, які існують тільки під час виконання того блоку, в якому вони визначені, є автоматичними.
Тобто, при вході в блок для подібних змінних виділяється пам'ять, а після завершення роботи цього блоку, виділена пам'ять звільняється, а змінні видаляються.
Функція print викликається три рази, і при кожному виклику програма повторно виділятиме пам'ять для змінної n, яка визначена в функції.
А після завершення роботи print, пам'ять для змінної n буде звільнятися.
Відповідно її значення при кожному виклику буде незмінно:
Статичні змінні
Крім автоматичних є особливий тип локальних змінних - статичні змінні. Вони визначаються за допомогою ключового слова static.
Статичні змінні ініціалізуються тільки один раз, а при наступних викликах функції використовується старе значення статичної змінної.
У попередній програмі зробимо змінну n статичної:
До змінної n було додано ключове слово static, тому при завершенні роботи функції print змінна n не знищується, навпаки, вона зберігається в пам'яті.
І відповідно результат роботи програми буде іншим:











Комментариев нет:
Отправить комментарий