МОЁ Верхнее меню

на 16 марта


Область видимості змінних

Область видимості - це частина програми, в межах якої можна використовувати змінну. Як правило, область видимості обмежується блоком коду, який знаходиться у фігурних дужках. Залежно від області видимості створювані об'єкти можуть бути глобальними або локальними.

Глобальні змінні

Глобальні змінні описані в програмі поза будь-якої функції і можуть використовуватися будь-якою функцією. У даній програмі змінна 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 не знищується, навпаки, вона зберігається в пам'яті. І відповідно результат роботи програми буде іншим:

Комментариев нет:

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