Классы хранения в C: Auto, Extern, Static, Register (примеры)
Что такое класс памяти в C?
Класс хранения представляет видимость и расположение переменной. Он сообщает, из какой части кода мы можем получить доступ к переменной. Класс хранения в C используется для описания следующих вещей:
- Область видимости переменной.
- Место, где будет храниться переменная.
- Инициализированное значение переменной.
- Время жизни переменной.
- Кто может получить доступ к переменной?
Таким образом, класс хранения используется для представления информации о переменной.
ПРИМЕЧАНИЕ: Переменная связана не только с тип данных, его значение, но также и класс хранения.
Каковы типы классов хранения в C?
Всего существует четыре типа стандартных классов хранения. В таблице ниже представлены классы хранения данных в C.
Класс хранения | Цель |
---|---|
автоматический | Это класс хранилища по умолчанию. |
внешний | Это глобальная переменная. |
статический | Это локальная переменная, которая способна возвращать значение, даже если управление передается вызову функции. |
зарегистрироваться | Это переменная, которая хранится внутри регистра. |
Класс автоматического хранения в C
Переменные, определенные с использованием класса автоматического хранения, называются локальными переменными. Auto означает автоматический класс хранения. По умолчанию переменная находится в классе автоматического хранения, если она не указана явно.
Область действия автоматической переменной ограничена только конкретным блоком. Как только управление выходит из блока, доступ уничтожается. Это означает, что доступ к ней может получить только тот блок, в котором объявлена переменная auto.
Ключевое слово auto используется для определения класса автоматического хранения. По умолчанию переменная auto содержит мусорное значение.
Example, auto int age;
В приведенной ниже программе определяется функция с двумя локальными переменными.
int add(void) { int a=13; auto int b=48; return a+b;}
Мы возьмем еще одну программу, которая показывает уровень видимости «уровня видимости» для автоматических переменных в каждом блочном коде, которые независимы друг от друга:
#include <stdio.h> 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 не может быть инициализирована, она уже определена в исходном файле.
Example, extern void display();
Первый файл: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Второй файл: original.c
#include <stdio.h> i=48;
Результат:
value of the external integer is = 48
Чтобы скомпилировать и запустить приведенный выше код, выполните следующие действия.
Шаг 1) Создать новый проект,
- Выберите консольное приложение
- Нажмите Go
Шаг 2) Выберите C и нажмите «Далее».
Шаг 3) Нажмите Далее
Шаг 4) Введите данные и нажмите «Далее».
Шаг 5) Нажмите Готово
Шаг 6) Поместите основной код, как показано в предыдущей программе, в файл main.c и сохраните его.
Шаг 7) Создайте новый файл C [File -> new -> Empty File, сохраните (как original.c) и добавьте его в текущий проект, нажав «ОК» в диалоговом окне.
Шаг 8) Поместите и сохраните код C исходного файла original.c, показанного в предыдущем примере, без функции main().
Шаг 9) Создайте и запустите свой проект. Результат показан на следующем рисунке
Статический класс хранения в C
Статические переменные используются внутри функции/файла как локальные статические переменные. Их также можно использовать в качестве глобальная переменная
- Статическая локальная переменная — это локальная переменная, которая сохраняет и сохраняет свое значение между вызовами функций или блоками и остается видимой только для функции или блока, в которых она определена.
- Статические глобальные переменные — это видимые глобальные переменные. только в файл, в котором он объявлен.
Example: static int count = 10;
Имейте в виду, что статическая переменная имеет нулевое начальное значение по умолчанию и инициализируется только один раз за время своего существования.
#include <stdio.h> /* 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= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Глобальные переменные доступны во всем файле, тогда как статические переменные доступны только для определенной части кода.
Срок жизни статической переменной находится во всем программном коде. Переменная, объявленная или инициализированная с использованием ключевого слова static, всегда содержит ноль в качестве значения по умолчанию.
Зарегистрировать класс хранилища в C
Вы можете использовать класс хранения регистров, если хотите хранить локальные переменные внутри функций или блоков в регистрах ЦП вместо Оперативная память чтобы иметь быстрый доступ к этим переменным. Например, «счетчики» — хорошие кандидаты для хранения в реестре.
Example: register int age;
Ключевое слово зарегистрироваться используется для объявления класса хранения регистра. Переменные, объявленные с использованием класса хранения регистров, имеют срок службы на протяжении всей программы.
Это похоже на класс автоматического хранения. Переменная ограничена конкретным блоком. Единственное отличие состоит в том, что переменные, объявленные с использованием класса хранения регистров, хранятся внутри регистров ЦП, а не в памяти. Регистр имеет более быстрый доступ, чем доступ к основной памяти.
Переменные, объявленные с использованием класса хранения регистров, не имеют значения по умолчанию. Эти переменные часто объявляются в начале программы.
#include <stdio.h> /* 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.
Класс хранения | Декларация | Память | Начальное значение по умолчанию | Объем | Вечного пользования |
---|---|---|---|---|---|
автоматический | Внутри функции/блока | Память | Непредсказуемый | Внутри функции/блока | Внутри функции/блока |
зарегистрироваться | Внутри функции/блока | Регистры процессора | Мусор | Внутри функции/блока | Внутри функции/блока |
внешний | Вне всех функций | Память | 0 | Заполните файл и другие файлы целиком, в которых переменная объявлена как extern. | время выполнения программы |
Статический (локальный) | Внутри функции/блока | Память | 0 | Внутри функции/блока | время выполнения программы |
Статический (глобальный) | Вне всех функций | Память | 0 | Глобальный | время выполнения программы |
Резюме
В этом уроке мы обсудили классы хранения в C, подведем итог:
- Класс хранения в C используется для представления дополнительной информации о переменной.
- Класс хранения представляет область действия и срок действия переменной.
- Он также сообщает, кто и откуда может получить доступ к переменной?
- Auto, extern, Register, static — это четыре разных класса памяти в программе на C.
- Спецификатор класса хранения в Язык C используется для определения переменных, функций и параметров.
- auto используется для локальной переменной, определенной внутри блока или функции.
- Регистр используется для хранения переменной в регистрах ЦП, а не в памяти для быстрого доступа.
- Статика используется как для глобальных, так и для локальных переменных. Каждый из них имеет свой вариант использования в программе на языке C.
- Extern используется для обмена данными между файлами проекта C.