Статичні змінні мають властивість зберігати своє значення навіть після того, як вони вийшли за межі своєї області! Таким чином, статична змінна зберігає своє попереднє значення в попередній області і не ініціалізується знову в новій області.
Синтаксис:
static data_type var_name = var_value;>
Нижче наведено кілька цікавих фактів про статичні змінні в C:
читати файл excel у java
1) Статична змінна int залишається в пам'яті під час виконання програми. Звичайна або автоматична змінна знищується, коли завершується виклик функції, де була оголошена змінна.
Наприклад, ми можемо використовувати static int для підрахунку кількості викликів функції, але автоматичну змінну не можна використовувати для цієї мети.
приклад
C
// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
>
>Вихід
1 2>
Наведена вище програма друкує 1 2, оскільки статичні змінні ініціалізуються лише один раз і живуть до кінця програми. Ось чому вони можуть зберігати свою цінність між кількома викликами функцій.
Давайте спробуємо той самий код для локальної автоматичної змінної.
приклад
підручник java для початківців
C
// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }> |
unordered_map c++
>
>Вихід
1 1>
2) Статичним змінним виділяється пам'ять у сегменті даних, а не в сегменті стека. Див компонування пам'яті програм на Сі для деталей.
3) Статичні змінні (наприклад, глобальні змінні) ініціалізуються як 0, якщо не ініціалізовані явно. Наприклад, у наведеній нижче програмі значення x друкується як 0, тоді як значення y є чимось сміттям. Побачити це для більш детальної інформації.
приклад
C
// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d
%d'>, x, y);> }> |
>
>
Вихід
0 [some_garbage_value]>
4) У C статичні змінні можна ініціалізувати лише за допомогою постійних літералів. Наприклад, наступна програма не під час компіляції. Побачити це для більш детальної інформації.
приклад
C
подвійний зв'язаний список
текст циклу foreach
#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }> |
>
>
Вихід
In function 'main': 9:5: error: initializer element is not constant static int i = initializer(); ^>
Примітка: Зверніть увагу, що ця умова не виконується в C++. Отже, якщо ви збережете програму як програму на C++, вона скомпілюється та працюватиме нормально.
5) Статичні глобальні змінні та функції також можливі в C/C++. Метою цього є обмеження області дії змінної або функції файлом. Будь ласка зверніться до Статичні функції в C для більш детальної інформації.
6) Статичні змінні не слід оголошувати всередині структури. Причина полягає в тому, що компілятор C вимагає, щоб усі елементи структури були розміщені разом (тобто розподіл пам’яті для членів структури має бути суміжним). Можна оголосити структуру всередині функції (сегмент стека) або динамічно виділити пам’ять (сегмент купи), або вона може бути навіть глобальною (BSS або сегмент даних). У будь-якому випадку всі члени структури повинні знаходитися в одному сегменті пам’яті, оскільки значення для елемента структури вибирається шляхом підрахунку зміщення елемента від початкової адреси структури. Виокремлення лише одного члена в сегменті даних перешкоджає меті структури, і можна мати всю структуру як статичну.
Пов'язані статті:
- Статичне ключове слово в C++
- Тест на статичні ключові слова
- Статичні члени даних у C++
- Коли руйнуються статичні об'єкти?
- Цікаві факти про статичні функції-члени
- Чи можуть статичні функції бути віртуальними?
- Порівняння статичних ключових слів у C++ і Java
- Статичні функції в C