Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
31.01.2021
Размер:
7.92 Кб
Скачать

Інформатика — Теорія — Ініціалізація глобальних і локальних змінних    Автори

|

Контакти

|

Підсистема допомоги

|

Методичні вказівки

|

Анотація

|

Назад

   ІнформатикаОбласть видимості : Ініціалізація глобальних і локальних зміннихЗміст курсу

Вступ

Теорія

Час життя та область видимості

Оголошення функцій

Час життя й область видимості програмних об'єктів

Ініціалізація глобальних і локальних змінних

Визначення об'єктів і типів

Поточна перевірка знань

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

Версія для друку

  Ініціалізація глобальних і локальних змінних      При ініціалізації необхідно дотримуватися наступних правил.

1. Оголошення, що містять специфікатор класу пам'яті extern, не можуть містити ініціаторів.

2. Глобальні змінні завжди ініціалізуються, і якщо це не зроблено явно, то вони ініціалізуються нульовим значенням.

3. Змінна із класом пам'яті static може бути ініціалізована константним вираженням. Ініціалізація для них виконується один раз перед початком програми. Якщо явна ініціалізація відсутня, то змінна ініціалізується нульовим значенням.

4. Ініціалізація змінних із класом пам'яті auto або register виконується щораз при вході в блок, у якому вони оголошені. Якщо ініціалізація змінних в оголошенні відсутня, то їхнє початкове значення не визначене.

5. Початковими значеннями для глобальних змінних і для змінних із класом пам'яті static повинні бути константні вираження. Адреси таких змінних є константами й ці константи можна використовувати для ініціалізації оголошених глобально покажчиків. Адреси змінних із класом пам'яті auto або register не є константами і їх не можна використовувати в ініціаторах.

int global_var;

int func(void)

{

     int local_var; /* за замовчуванням auto */

     static int *local_ptr=&local_var; /* так неправильно */

     static int *global_ptr=&global_var; /* а так правильно */

     register int *reg_ptr=&local_var; /* і так правильно */

}

     У наведеному прикладі глобальна змінна global_var має глобальний час життя й постійну адреса в пам'яті, і цю адресу можна використовувати для ініціалізації статичного покажчика global_ptr. Локальна змінна local_var, що має клас пам'яті auto, розміщається в пам'яті тільки на час роботи функції func, адреса цієї змінної не є константою й не може бути використана для ініціалізації статичної змінної local_ptr. Для ініціалізації локальної регістрової змінної reg_ptr можна використовувати неконстантні вираження, і, зокрема, адресу змінної local_ptr.

 © 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS

Соседние файлы в папке content