Co je třída úložiště v C?
Třída úložiště představuje viditelnost a umístění proměnné. Říká, z jaké části kódu můžeme přistupovat k proměnné. Třída úložiště v jazyce C se používá k popisu následujících věcí:
- Proměnlivý rozsah.
- Místo, kde bude proměnná uložena.
- Inicializovaná hodnota proměnné.
- Životnost proměnné.
- Kdo má přístup k proměnné?
Třída úložiště se tedy používá k reprezentaci informací o proměnné.
POZNÁMKA: Proměnná není spojena pouze s datovým typem, jeho hodnotou, ale také s třídou úložiště.
Existují celkem čtyři typy standardních tříd úložiště. Níže uvedená tabulka představuje třídy úložiště v C.
Třída skladování | Účel |
auto | Je to výchozí třída úložiště. |
externí | Je to globální proměnná. |
statický | Jedná se o místní proměnnou, která je schopna vracet hodnotu, i když je ovládací prvek přenesen do volání funkce. |
Registrovat | Je to proměnná, která je uložena uvnitř registru. |
V tomto výukovém programu C se naučíte různé typy tříd úložiště v jazyce C s příklady -
- Třída automatického ukládání v C
- Třída externího úložiště v C.
- První soubor: main.c
- Druhý soubor: original.c
- Statická třída skladování v C.
- Registrovat třídu úložiště v C.
Třída automatického ukládání v C
Proměnné definované pomocí třídy automatického úložiště se nazývají jako lokální proměnné. Auto znamená třídu automatického ukládání. Proměnná je ve výchozím nastavení ve třídě automatického úložiště, pokud není výslovně uvedena.
Rozsah automatické proměnné je omezen pouze na konkrétní blok. Jakmile ovládací prvek vyjde z bloku, přístup je zničen. To znamená, že k ní má přístup pouze blok, ve kterém je deklarována automatická proměnná.
Klíčové slovo auto se používá k definování třídy automatického úložiště. Ve výchozím nastavení obsahuje automatická proměnná nesmyslnou hodnotu.
Example, auto int age;
Níže uvedený program definuje funkci se dvěma lokálními proměnnými
int add(void) {int a=13;auto int b=48;return a+b;}
Vezmeme jiný program, který zobrazuje úroveň rozsahu "úroveň viditelnosti" pro automatické proměnné v každém kódu bloku, které jsou navzájem nezávislé:
#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);}
VÝSTUP:
3 2 1
Třída externího úložiště v C.
Extern znamená třídu externího úložiště. Třída externího úložiště se používá, když máme globální funkce nebo proměnné sdílené mezi dvěma nebo více soubory.
Klíčové slovo extern se používá k deklaraci globální proměnné nebo funkce v jiném souboru k poskytnutí odkazu na proměnnou nebo funkci, které již byly definovány v původním souboru.
Proměnné definované pomocí externího klíčového slova se nazývají globální proměnné. Tyto proměnné jsou přístupné v celém programu. Všimněte si, že externí proměnnou nelze inicializovat, již byla definována v původním souboru.
Example, extern void display();
První soubor: main.c
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Druhý soubor: original.c
#includei=48;
Výsledek:
value of the external integer is = 48
Chcete-li kompilovat a spustit výše uvedený kód, postupujte podle následujících kroků
Krok 1) Vytvořte nový projekt,
- Vyberte konzolovou aplikaci
- Klikněte na Přejít
Krok 2) Vyberte C a klikněte na Další
Krok 3) Klikněte na Další
Krok 4) Zadejte podrobnosti a klikněte na Další
Krok 5) Klikněte na Dokončit
Krok 6) Vložte hlavní kód, jak je znázorněno v předchozím programu, do souboru main.c a uložte jej
Krok 7) Vytvořte nový soubor C [Soubor -> nový -> Prázdný soubor, uložte jej (jako originál.c) a přidejte jej do aktuálního projektu kliknutím na tlačítko „OK“ v dialogovém okně.
Krok 8) Vložte a uložte C kód souboru original.c zobrazeného v předchozím příkladu bez funkce main ().
Krok 9) Vytvořte a spusťte svůj projekt. Výsledek je uveden na následujícím obrázku
Statická třída skladování v C.
Statické proměnné se používají v rámci funkce / souboru jako lokální statické proměnné. Mohou být také použity jako globální proměnná
- Statická lokální proměnná je lokální proměnná, která zachovává a ukládá svou hodnotu mezi voláními funkcí nebo blokem a zůstává viditelná pouze pro funkci nebo blok, ve kterém je definována.
- Statické globální proměnné jsou globální proměnné viditelné pouze pro soubor, ve kterém je deklarován.
Example: static int count = 10;
Mějte na paměti, že statická proměnná má výchozí počáteční hodnotu nula a je inicializována pouze jednou za dobu její životnosti.
#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);}
Výsledek:
iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9
Globální proměnné jsou přístupné v celém souboru, zatímco statické proměnné jsou přístupné pouze pro konkrétní část kódu.
Životnost statické proměnné je v celém kódu programu. Proměnná, která je deklarována nebo inicializována pomocí statického klíčového slova, obsahuje jako výchozí hodnotu vždy nulu.
Registrovat třídu úložiště v C.
Třídu úložiště registrů můžete použít, pokud chcete ukládat místní proměnné do funkcí nebo bloků do registrů CPU namísto RAM, abyste k těmto proměnným měli rychlý přístup. Například „počitadla“ jsou dobrým kandidátem na uložení do registru.
Example: register int age;
Registr klíčových slov se používá k deklaraci třídy úložiště registrů. Proměnné deklarované pomocí třídy úložiště registrů mají životnost v celém programu.
Je to podobné jako třída automatického ukládání. Proměnná je omezena na konkrétní blok. Jediným rozdílem je, že proměnné deklarované pomocí třídy úložiště registrů jsou uloženy uvnitř registrů CPU namísto paměti. Registr má rychlejší přístup než hlavní paměť.
Proměnné deklarované pomocí třídy úložiště registrů nemají žádnou výchozí hodnotu. Tyto proměnné jsou často deklarovány na začátku programu.
#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*/}}
VÝSTUP:
error: address of register variable 'weight' requested
Následující tabulka shrnuje hlavní funkce každé třídy úložiště, které se běžně používají v programování C.
Třída skladování | Prohlášení | Úložný prostor | Výchozí počáteční hodnota | Rozsah | Život |
auto | Uvnitř funkce / bloku | Paměť | Nepředvídatelné | V rámci funkce / bloku | V rámci funkce / bloku |
Registrovat | Uvnitř funkce / bloku | Registry CPU | Odpadky | V rámci funkce / bloku | V rámci funkce / bloku |
externí | Mimo všechny funkce | Paměť | Nula | Zadejte celý soubor a další soubory, kde je proměnná deklarována jako externí | běh programu |
Statický (místní) | Uvnitř funkce / bloku | Paměť | Nula | V rámci funkce / bloku | běh programu |
Statické (globální) | Mimo všechny funkce | Paměť | Nula | Globální | běh programu |
souhrn
V tomto tutoriálu jsme diskutovali třídy úložiště v C, abychom shrnuli:
- Třída úložiště v C se používá k reprezentaci dalších informací o proměnné.
- Třída úložiště představuje rozsah a životnost proměnné.
- Také říká, kdo má přístup k proměnné a odkud?
- Auto, extern, register, static jsou čtyři různé třídy úložiště v programu C.
- Specifikátor třídy úložiště v jazyce C se používá k definování proměnných, funkcí a parametrů.
- auto se používá pro místní proměnnou definovanou v rámci bloku nebo funkce
- register slouží k ukládání proměnné do registrů CPU, spíše do paměti pro rychlý přístup.
- Statické se používá pro globální i místní proměnné. Každý z nich má svůj případ použití v rámci programu C.
- Extern se používá pro sdílení dat mezi soubory projektu C.