Введение в классы хранения C

Каждое значение или число должно храниться в каком-то месте для последующего использования, верно? Это можно сделать с помощью переменных в C. Переменные - это области хранения, используемые в наших программах. Каждая переменная будет иметь определенный тип, такой как целое число, символ, а также будет иметь определенный размер и расположение в зависимости от их типа. Каждый тип переменной должен храниться в определенной части памяти и иметь ограниченные или определенные права доступа. Классы хранения в C определяют, в какой части памяти должна храниться каждая переменная, а также определяет объем (видимость) переменной. Существует четыре типа классов хранения: auto, extern, static и register. Один спецификатор хранилища может быть упомянут вместе с переменной.

Типы классов хранения в C

Типы классов хранения в C следующие

1. Класс автоматического хранения

Все переменные, объявленные в функции или блоке, по умолчанию будут храниться в автоопределителе, даже если он явно не определен. Спецификатор для этого класса хранения - 'auto'. Область видимости или переменные в классе автоматического хранения являются локальными для блока или функции, которые они определяют. Переменная будет уничтожена, как только мы выйдем из функции или блока.

Это можно объяснить лучше на примере. Рассмотрим пример, приведенный ниже:

Код:

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

Выход:

4

2

Здесь переменная I типа integer объявляется первой с присвоенным ей значением 2. Затем внутри цикла или блока снова объявляется переменная I того же целочисленного типа со значением 4. Если спецификатор хранилища не указан, по умолчанию он будет принят как автоматический. В первом операторе printf, который упоминается внутри блока, будет напечатано 4 при печати значения I. В то время как во втором операторе printf, упомянутом вне блока, будет напечатано значение I как 2, значение, которое упомянуто вне блок. Лучше инициализировать некоторые значения автоматическими переменными, потому что иногда есть вероятность получить какое-либо мусорное значение, если инициализация не выполнена. Этот пример дает ясную картину авто переменных и о локальной области видимости.

2. Зарегистрируйте класс хранения

Переменные, хранящиеся в классе хранения регистров, также будут иметь локальную область видимости, что означает, что они доступны или видны только в блоке, в котором они объявлены. Это хранилище похоже на auto, но основное отличие состоит в том, что auto переменные хранятся в памяти, тогда как переменные регистров хранятся в регистрах CPU. Это сделано, если мы хотим получить доступ к переменной очень часто. Они могут быть использованы быстрее. Только несколько переменных хранятся с использованием спецификаторов регистра. Если в регистре нет места, он сохраняется только в памяти. Начальные значения не присваиваются переменным регистра. Кроме того, оператор & (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 хранятся в классе хранения extern. Когда переменная, объявленная как extern, является программой, она определяет внешнюю связь, и, следовательно, она не определяется и не инициализируется снова. Память выделяется только одна, а также инициализируется только один раз. Если внешние переменные инициализируются снова с другим значением во внешней программе, мы получим сообщение об ошибке «Переопределение переменной».

Внешние переменные объясняются с помощью приведенного ниже примера:

Код:

Prg1.c

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

Prg2.c

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

Выход:

10

Здесь целочисленная переменная count объявлена ​​в первой C-программе (Prg1.c), а внутри главной функции она инициализирована значением 10. Во второй C-программе та же переменная count объявлена ​​с использованием спецификатора extern, который указывает, что есть внешняя связь, и значение извлекается из хранилища, а значение 10 присваивается счетчику значений, когда мы печатаем его во второй программе. Это использование внешних переменных. Таким образом, в зависимости от различного назначения каждый класс хранения используется для соответствующих переменных, и он объявляется с соответствующими спецификаторами.

Рекомендуемые статьи

Это руководство к C классам хранения. Здесь мы обсуждаем типы классов хранения, которые включают в себя класс автоматического хранения, класс хранения регистров, класс статического хранения и класс внешнего хранения. Вы также можете посмотреть следующие статьи, чтобы узнать больше:

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