Въведение в класовете за съхранение на C

Всяка стойност или число трябва да се съхранява на друго място за по-късна употреба, нали? Това може да стане с помощта на променливи в C. Променливите са области за съхранение, използвани в нашите програми. Всяка променлива ще бъде от конкретен тип като цяло число, символ и също ще има определен размер и оформление в зависимост от техния тип. Всеки тип променлива трябва да се съхранява в конкретна част от паметта и ще има ограничени или специфични разрешения за достъп. Класовете за съхранение в C определят в коя част от паметта трябва да се съхранява всяка променлива и също така решава обхвата (видимостта) на променливата. Има четири типа класове за съхранение - auto, extern, static и register. Един спецификатор за съхранение може да бъде споменат заедно с променливата.

Видове класове за съхранение в С

Видовете класове за съхранение в C са както следва

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 е програма, тя определя външната връзка и следователно не е дефинирана или инициализирана отново. Съхранението се разпределя само едно и също се инициализира само веднъж. Ако външните променливи се инициализират отново с друга стойност във външната програма, ще получим грешка, заявяваща „Предефиниране на променливата“.

Външните променливи се обясняват с помощта на следния пример:

Код:

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 ++