КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Змінні. Клас пам'яті.Для завдання класу пам'ятівикористовуються наступні специфікатори: auto— автоматична змінна. Пам'ять під неї виділяється в стеку і при необхідності ініціалізувався кожного разу при виконанні оператора, що містить її визначення. Звільнення пам'яті відбувається при виході з блоку, в якому описана змінна. Час її життя — з моменту опису до кінця блоку. Для глобальних змінних цей специфікатор не використовується, а для локальних він приймається за умовчанням, тому задавати його явним чином великого сенсу не має. extern— означає, що змінна визначається у іншому місці програми (у іншому файлі або далі по тексту). Використовується для створення змінних, доступних у всіх модулях програми, в яких вони оголошені. static— статична змінна. Час життя — постійне. Ініціалізувався один раз при першому виконанні оператора, що містить визначення змінної. Залежно від розташування оператора опису статичні змінні можуть бути глобальними і локальними. Глобальні статичні змінні видно тільки в тому модулі, в якому вони описані. register— аналогічно auto, але пам'ять виділяється по можливості в регістрах процесора. Якщо такої можливості у компілятора немає, змінні обробляються як auto. int а; // 1 глобальна змінна а int main(){ int b; // 2 локальна змінна b extern int x; // 3 змінна х визначена у іншому місці static int з; // 4 локальна статична змінна з а = 1; //5 присвоєння глобальної змінної int а; //6 локальна змінна а а = 2; //7 присвоєння локальної змінної ::а = 3; //8 присвоєння глобальної змінної return 0; } int x = 4; // 9 визначення і ініціалізація х В даному прикладі глобальна змінна а визначена поза всіма блоками. Пам'ять під неї виділяється в сегменті даних на початку роботи програми, областю дії є вся програма. Область видимості — вся програма, окрім рядків 6-8, оскільки в першій з них визначається локальна змінна з тим же ім'ям, область дії якої починається з точки її опису і закінчується при виході з блоку. Змінні b і з — локальні, область їх видимості — блок, але час життя різний: пам'ять під b виділяється в стеку при вході в блок і звільняється при виході з нього, а змінна з розташовується в сегменті даних і існує весь час, поки працює програма. Якщо при визначенні початкове значення змінних явним чином не задається, компілятор привласнює глобальним і статичним змінним нульове значення відповідного типу. Автоматичні змінні не ініціалізувалися. Ім'я змінної повинне бути унікальним в своїй області дії (наприклад, в одному блоці не може бути два змінних з однаковими іменами).
|