Вступ до класів зберігання C

Кожне значення або число потрібно зберігати десь для подальшого використання, правда? Це можна зробити за допомогою змінних у C. Змінні - це області зберігання, які використовуються в наших програмах. Кожна змінна буде мати певний тип, як ціле число, символ, а також матиме конкретний розмір та макет залежно від їх типу. Кожен тип змінної повинен зберігатися в певній частині пам'яті і матиме обмежені або конкретні права доступу. Класи зберігання в C визначають, в якій частині пам'яті повинна зберігатися кожна змінна, а також вона визначає область (видимість) змінної. Існує чотири типи класів зберігання - auto, extern, статичні та регістри. Один специфікатор пам’яті можна згадати разом із змінною.

Види класів зберігання в С

Типи класів зберігання в С є наступними

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

Усі змінні, оголошені в межах функції або блоку, за замовчуванням будуть зберігатися в автоматичному специфікаторі, навіть якщо це не визначено прямо. Специфікатором цього класу зберігання є "auto". Обсяг або видимість змінних у класі автоматичного зберігання є локальними для визначеного блоку або функції. Змінна буде знищена, як тільки ми вийдемо з функції або блоку.

Це можна пояснити краще на прикладі. Розглянемо приклад, наведений нижче:

Код:

int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)

Вихід:

4

2

Тут змінна I типу цілого числа спочатку оголошується із присвоєним їй значенням 2. Далі всередині циклу або блоку знову змінна I того ж цілого типу оголошується зі значенням 4, присвоєним йому. Якщо специфікатор пам’яті не згадується, він за замовчуванням вважатиметься автоматичним. У першому операторі printf, який згадується всередині блоку, буде надруковано 4 при друкуванні значення I. Тоді як у другому операторі printf, який згадується поза блоком, буде надруковано значення I як 2, значення, яке згадується зовні блок. Краще ввести деяке значення для автоматичних змінних, оскільки є шанси отримати будь-яке значення сміття іноді, якщо ініціалізація не виконана. Цей приклад дає чітке уявлення про автоматичні змінні та про локальну область застосування.

2. Реєстрація класу зберігання

Змінні, що зберігаються в класі зберігання реєстру, також матимуть локальну область, що означає, що вона доступна або видима лише в блоці, в якому вона оголошена. Цей сховище схоже на автоматичне, але головна відмінність полягає в тому, що автоматичні змінні зберігаються в пам'яті, тоді як змінні реєстру зберігаються в регістрах процесора. Це робиться, якщо ми хочемо отримати доступ до змінної дуже часто. Їх можна використовувати швидше. За допомогою специфікаторів регістру зберігається лише кілька змінних. Якщо в регістрі немає місця, він зберігається лише в пам'яті. Не змінюється початкове значення змінним регістру. Також оператор & (address-of) не може бути використаний для змінних регістрів. Наприклад, змінні, які використовуються для лічильників або подібних типів використання, зберігаються за допомогою специфікатора регістру.

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

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

Статичні змінні можна чітко зобразити за допомогою наведеного нижче прикладу:

Код:

int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)

Вихід:

2

4

Тут у вищенаведеній програмі, коли викликається samplefunc (), змінна a визначається та ініціалізується вперше і для неї створюється постійне сховище. За математичним виразом, використовуваним у функції, значення a тоді стає 2. Але коли той самий samplefunc () називається другий раз, змінна a не визначається або ініціалізується знову, швидше вона приймає останнє збережене значення і продовжує операцію що робить кінцевий результат як 4. Це головне використання та перевага статичних змінних.

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

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

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

Код:

Prg1.c

int count;
int main() (
count = 10;
)

Prg2.c

extern int count;
int main() (
printf(“%d”, count);
)

Вихід:

10

Тут число цілочисельних змінних оголошується в першій програмі C (Prg1.c), а всередині основної функції вона ініціалізується на значення 10. У другій програмі C та сама змінна кількість оголошується за допомогою специфікатора extern, який визначає, що є зовнішня зв'язок, і значення витягується із сховища, а значення 10 надається підрахунку значення, коли ми друкуємо його у другій програмі. Це використання зовнішніх змінних. Таким чином, залежно від різного призначення, кожен клас зберігання використовується для відповідних змінних і оголошується відповідними специфікаторами.

Рекомендовані статті

Це посібник з класів зберігання C. Тут ми обговорюємо типи класів зберігання, які включають клас автоматичного зберігання, клас зберігання в регістрі, клас статичного зберігання та клас зовнішнього зберігання. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Що таке JavaBeans?
  2. ES6 проти ES5
  3. C ++ проти Visual C ++
  4. Продуктивність C проти C ++