Что такое класс хранения в C?
Класс хранения представляет собой видимость и расположение переменной. Он сообщает, из какой части кода мы можем получить доступ к переменной. Класс хранения в C используется для описания следующих вещей:
- Область видимости переменной.
- Место, где будет храниться переменная.
- Инициализированное значение переменной.
- Время жизни переменной.
- Кто может получить доступ к переменной?
Таким образом, класс хранения используется для представления информации о переменной.
ПРИМЕЧАНИЕ. Переменная связана не только с типом данных, его значением, но и с классом хранения.
Всего существует четыре типа стандартных классов хранения. В таблице ниже представлены классы хранения в C.
Класс хранения | Цель |
авто | Это класс хранения по умолчанию. |
внешний | Это глобальная переменная. |
статический | Это локальная переменная, которая способна возвращать значение, даже когда управление передается вызову функции. |
регистр | Это переменная, которая хранится в регистре. |
В этом руководстве по C вы изучите различные типы классов хранения в C с примерами:
- Класс автоматического хранения в C
- Класс внешнего хранилища в C
- Первый файл: main.c
- Второй файл: original.c
- Класс статического хранения в C
- Зарегистрируйте класс хранилища в C
Класс автоматического хранения в C
Переменные, определенные с помощью класса автоматического хранения, называются локальными переменными. Авто означает автоматический класс хранения. По умолчанию переменная относится к классу автоматического хранения, если она не указана явно.
Объем автоматической переменной ограничен только конкретным блоком. Как только управление выходит из блока, доступ прекращается. Это означает, что только блок, в котором объявлена переменная auto, может получить к ней доступ.
Ключевое слово auto используется для определения класса автоматического хранения. По умолчанию автоматическая переменная содержит мусорное значение.
Example, auto int age;
Программа ниже определяет функцию с двумя локальными переменными
int add(void) {int a=13;auto int b=48;return a+b;}
Возьмем другую программу, которая показывает "уровень видимости" уровня области видимости для автоматических переменных в каждом коде блока, которые не зависят друг от друга:
#includeint 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
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Второй файл: original.c
#includei=48;
Результат:
value of the external integer is = 48
Чтобы скомпилировать и запустить приведенный выше код, выполните следующие действия.
Шаг 1) Создайте новый проект,
- Выберите консольное приложение
- Нажмите "Перейти"
Шаг 2) Выберите C и нажмите Далее.
Шаг 3) Нажмите Далее
Шаг 4) Введите данные и нажмите Далее.
Шаг 5) Нажмите Готово.
Шаг 6) Поместите основной код, как показано в предыдущей программе, в файл main.c и сохраните его.
Шаг 7) Создайте новый файл C [Файл -> новый -> Пустой файл, сохраните (как original.c) и добавьте его в текущий проект, нажав «ОК» в диалоговом окне.
Шаг 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
Глобальные переменные доступны во всем файле, тогда как статические переменные доступны только для определенной части кода.
Срок жизни статической переменной - во всем программном коде. Переменная, объявленная или инициализированная с использованием ключевого слова static, всегда содержит ноль в качестве значения по умолчанию.
Зарегистрируйте класс хранилища в 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 используется для локальной переменной, определенной в блоке или функции
- Регистр используется для хранения переменной в регистрах процессора, а не в ячейке памяти для быстрого доступа.
- Статический используется как для глобальных, так и для локальных переменных. У каждого есть свой вариант использования в программе C.
- Extern используется для обмена данными между файлами проекта C.