Какво е клас на съхранение в C?
Класът за съхранение представлява видимостта и местоположението на променлива. Той казва от коя част на кода можем да получим достъп до променлива. Клас за съхранение в C се използва за описание на следните неща:
- Обхватът на променливата.
- Местоположението, където ще се съхранява променливата.
- Инициализираната стойност на променлива.
- Живот на променлива.
- Кой има достъп до променлива?
По този начин клас на съхранение се използва за представяне на информацията за променлива.
ЗАБЕЛЕЖКА: Променливата е свързана не само с тип данни, нейната стойност, но и с клас на съхранение.
Има общо четири типа стандартни класове за съхранение. Таблицата по-долу представя класовете за съхранение в C.
Клас на съхранение | Предназначение |
Автоматичен | Това е клас за съхранение по подразбиране. |
външен | Това е глобална променлива. |
статични | Това е локална променлива, която е в състояние да върне стойност, дори когато контролът се прехвърля към извикването на функцията. |
регистрирам | Това е променлива, която се съхранява в регистър. |
В този урок C ще научите различни типове класове за съхранение в C с примери-
- Клас за автоматично съхранение в C
- Клас за външно съхранение в C
- Първи файл: main.c
- Втори файл: original.c
- Клас на статично съхранение в C
- Регистрирайте клас за съхранение в C
Клас за автоматично съхранение в C
Променливите, дефинирани с помощта на клас за автоматично съхранение, се извикват като локални променливи. Авто означава клас за автоматично съхранение. По подразбиране променливата е в клас за автоматично съхранение, ако не е изрично посочена.
Обхватът на автоматична променлива е ограничен само с конкретния блок. След като контролът излезе от блока, достъпът се унищожава. Това означава, че само блокът, в който е декларирана автоматичната променлива, може да има достъп до нея.
Ключова дума 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, се извикват като глобални променливи. Тези променливи са достъпни в цялата програма. Забележете, че външната променлива не може да бъде инициализирана, тя вече е дефинирана в оригиналния файл.
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) Създайте нов проект,
- Изберете Конзолно приложение
- Щракнете върху Go
Стъпка 2) Изберете C и щракнете върху Напред
Стъпка 3) Щракнете върху Напред
Стъпка 4) Въведете подробности и щракнете върху Напред
Стъпка 5) Щракнете върху Finish
Стъпка 6) Поставете основния код, както е показано в предишната програма, във файла main.c и го запазете
Стъпка 7) Създайте нов C файл [File -> new -> Empty File, save (as original.c) и го добавете към текущия проект, като щракнете върху „OK“ в диалоговия прозорец.
Стъпка 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
Глобалните променливи са достъпни в целия файл, докато статичните променливи са достъпни само за конкретната част на кода.
Продължителността на живота на статична променлива е в целия програмен код. Променлива, която се декларира или инициализира с помощта на статична ключова дума, винаги съдържа нула като стойност по подразбиране.
Регистрирайте клас за съхранение в C
Можете да използвате класа за съхранение на регистрите, когато искате да съхранявате локални променливи в функции или блокове в регистрите на процесора вместо RAM, за да имате бърз достъп до тези променливи. Например „броячите“ са добър кандидат за съхраняване в регистъра.
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
Клас на съхранение | Декларация | Съхранение | Начална стойност по подразбиране | Обхват | Живот |
Автоматичен | Вътре във функция / блок | Памет | Непредсказуемо | В рамките на функцията / блока | В рамките на функцията / блока |
регистрирам | Вътре във функция / блок | Регистри на процесора | Боклук | В рамките на функцията / блока | В рамките на функцията / блока |
външен | Извън всички функции | Памет | Нула | Цял файл и други файлове, където променливата е декларирана като външна | време на изпълнение на програмата |
Статично (локално) | Вътре във функция / блок | Памет | Нула | В рамките на функцията / блока | време на изпълнение на програмата |
Статично (глобално) | Извън всички функции | Памет | Нула | Глобален | време на изпълнение на програмата |
Обобщение
В този урок обсъдихме класовете за съхранение в C, за да обобщим:
- Клас за съхранение в C се използва за представяне на допълнителна информация за променлива.
- Класът за съхранение представлява обхвата и продължителността на живота на променлива.
- Той също така казва кой и от къде може да има достъп до променлива?
- Auto, extern, register, static са четирите различни класа за съхранение в C програма.
- Спецификатор на клас за съхранение на език C се използва за дефиниране на променливи, функции и параметри.
- auto се използва за локална променлива, дефинирана в рамките на блок или функция
- register се използва за съхраняване на променливата в регистрите на процесора, а не местоположението на паметта за бърз достъп.
- Статиката се използва както за глобални, така и за локални променливи. Всеки от тях има случай на употреба в рамките на програма C.
- Extern се използва за споделяне на данни между файлове на C проект.