Класи зберігання на C: автоматичний, зовнішній, статичний, клас реєстру на C

Зміст:

Anonim

Що таке клас зберігання в C?

Клас зберігання представляє видимість та розташування змінної. Він повідомляє, з якої частини коду ми можемо отримати доступ до змінної. Клас зберігання на C використовується для опису таких речей:

  • Сфера змінної.
  • Місце, де буде зберігатися змінна.
  • Ініціалізоване значення змінної.
  • Термін служби змінної.
  • Хто може отримати доступ до змінної?

Таким чином клас зберігання використовується для представлення інформації про змінну.

ПРИМІТКА: Змінна не лише пов’язана з типом даних, його значенням, але і з класом зберігання.

Всього існує чотири типи стандартних класів зберігання. У таблиці нижче представлені класи зберігання в C.

Клас зберігання Призначення
авто Це клас зберігання за замовчуванням.
зовнішній Це глобальна змінна.
статичний Це локальна змінна, яка здатна повертати значення, навіть коли керування передається у виклик функції.
реєструвати Це змінна, яка зберігається всередині реєстру.

У цьому посібнику на C ви дізнаєтесь різні типи класів зберігання на C з прикладами -

  • Клас автоматичного зберігання в C
  • Клас зовнішнього зберігання в C
    • Перший файл: main.c
    • Другий файл: original.c
  • Клас статичного зберігання в C
  • Зареєструвати клас зберігання в C

Клас автоматичного зберігання в C

Змінні, визначені за допомогою класу автоматичного зберігання, називаються локальними змінними. Авто означає клас автоматичного зберігання. Змінна за замовчуванням знаходиться в класі автоматичного зберігання, якщо це явно не вказано.

Область дії автоматичної змінної обмежена лише певним блоком. Як тільки елемент керування виходить із блоку, доступ руйнується. Це означає, що лише блок, в якому оголошено автоматичну змінну, може отримати до неї доступ.

Ключове слово auto використовується для визначення класу автоматичного зберігання. За замовчуванням автоматична змінна містить значення сміття.

Example, auto int age;

Програма нижче визначає функцію з двома локальними змінними

int add(void) {int a=13;auto int b=48;return a+b;}

Ми беремо іншу програму, яка показує рівень видимості "рівень видимості" для автоматичних змінних в коді кожного блоку, які є незалежними один від одного:

#include int main( ){auto int j = 1;{auto int j= 2;{auto int j = 3;printf ( " %d ", j);}printf ( "\t %d ",j);}printf( "%d\n", j);}

ВИХІД:

 3 2 1 

Клас зовнішнього зберігання в C

Extern означає клас зовнішнього сховища. Клас зовнішнього сховища використовується, коли ми маємо глобальні функції або змінні, які спільно використовуються між двома або більше файлами.

Ключове слово extern використовується для оголошення глобальної змінної чи функції в іншому файлі, щоб надати посилання на змінну або функцію, які вже були визначені у вихідному файлі.

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

Example, extern void display();

Перший файл: main.c

#include extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Другий файл: original.c

#include i=48;

Результат:

 value of the external integer is = 48

Для того, щоб скомпілювати та запустити наведений вище код, виконайте наведені нижче дії

Крок 1) Створіть новий проект,

  1. Виберіть Консольний додаток
  2. Клацніть Перейти

Крок 2) Виберіть С і натисніть Далі

Крок 3) Натисніть Далі

Крок 4) Введіть деталі та натисніть Далі

Крок 5) Натисніть Готово

Крок 6) Вставте основний код, як показано в попередній програмі, у файл main.c та збережіть його

Крок 7) Створіть новий файл C [Файл -> новий -> Порожній файл, збережіть (як original.c) та додайте його до поточного проекту, натиснувши "OK" у діалоговому вікні.

Крок 8) Помістіть і збережіть код C файлу original.c, показаний у попередньому прикладі, без функції main ().

Крок 9) Створіть і запустіть свій проект. Результат показаний на наступному малюнку

Клас статичного зберігання в C

Статичні змінні використовуються у функції / файлі як локальні статичні змінні. Вони також можуть використовуватися як глобальна змінна

  • Статична локальна змінна - це локальна змінна, яка зберігає і зберігає своє значення між викликами функції або блоком і залишається видимою лише для функції або блоку, в якому вона визначена.
  • Статичні глобальні змінні - це глобальні змінні, видимі лише для файлу, в якому вони оголошені.
Example: static int count = 10;

Майте на увазі, що статична змінна має початкове значення за замовчуванням нуль і ініціалізується лише один раз у своєму житті.

#include  /* function declaration */void next(void);static int counter = 7; /* global variable */main() {while(counter<10) {next();counter++; }return 0;}void next( void ) { /* function definition */static int iteration = 13; /* local static variable */iteration ++;printf("iteration=%d and counter= %d\n", iteration, counter);}

Результат:

iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9

Глобальні змінні доступні у всьому файлі, тоді як статичні змінні доступні лише для певної частини коду.

Тривалість життя статичної змінної міститься у всьому програмному коді. Змінна, яка оголошена або ініціалізована за допомогою статичного ключового слова, завжди містить нуль як значення за замовчуванням.

Зареєструвати клас зберігання в C

Ви можете використовувати клас зберігання регістрів, коли ви хочете зберігати локальні змінні всередині функцій або блоків у регістрах ЦП замість оперативної пам'яті, щоб мати швидкий доступ до цих змінних. Наприклад, "лічильники" є хорошим кандидатом для збереження в реєстрі.

Example: register int age;

Регістр ключових слів використовується для оголошення класу зберігання регістрів. Змінні, оголошені за допомогою класу зберігання регістрів, мають тривалість життя протягом усієї програми.

Це схоже на клас автоматичного зберігання. Змінна обмежена певним блоком. Єдина відмінність полягає в тому, що змінні, оголошені за допомогою класу зберігання регістрів, зберігаються всередині регістрів ЦП замість пам'яті. Реєстр має швидший доступ, ніж доступ до основної пам'яті.

Змінні, оголошені за допомогою класу зберігання регістрів, не мають значення за замовчуванням. Ці змінні часто оголошуються на початку програми.

#include  /* function declaration */main() {{register int weight;int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}}

ВИХІД:

error: address of register variable 'weight' requested

Наступна таблиця узагальнює основні особливості кожного класу сховища, які зазвичай використовуються в програмуванні на C.

Клас зберігання Декларація Зберігання Початкове значення за замовчуванням Сфера дії Час життя
авто Усередині функції / блоку Пам'ять Непередбачуваний Усередині функції / блоку Усередині функції / блоку
реєструвати Усередині функції / блоку Реєстри ЦП Сміття Усередині функції / блоку Усередині функції / блоку
зовнішній Поза усіма функціями Пам'ять Нуль Весь файл та інші файли, де змінна оголошена як extern час виконання програми
Статичний (локальний) Усередині функції / блоку Пам'ять Нуль Усередині функції / блоку час виконання програми
Статичний (глобальний) Поза усіма функціями Пам'ять Нуль Глобальний час виконання програми

Резюме

У цьому підручнику ми обговорили класи зберігання на C, щоб підсумувати:

  • Клас зберігання на C використовується для представлення додаткової інформації про змінну.
  • Клас зберігання представляє обсяг і тривалість життя змінної.
  • Він також повідомляє, хто і звідки може отримати доступ до змінної?
  • Auto, extern, register, static - це чотири різні класи зберігання в програмі на C.
  • Специфікатор класу сховища мовою C використовується для визначення змінних, функцій та параметрів.
  • auto використовується для локальної змінної, визначеної в межах блоку або функції
  • register використовується для зберігання змінної в регістрах процесора, а не місця в пам'яті для швидкого доступу.
  • Статична використовується як для глобальних, так і для локальних змінних. Кожен з них має свій варіант використання в рамках програми C.
  • Extern використовується для обміну даними між файлами проекту C.