Úvod do tříd úložiště C

Každá hodnota nebo číslo musí být uloženy někde pro pozdější použití, že? To lze provést pomocí proměnných v C. Proměnné jsou oblasti úložiště používané v našich programech. Každá proměnná bude určitého typu, jako je celé číslo, znak a také bude mít konkrétní velikost a rozvržení v závislosti na jejich typu. Každý typ proměnné by měl být uložen v určité části paměti a měl by omezená nebo specifická přístupová oprávnění. Třídy úložiště v C určuje, ve které části paměti by měla být každá proměnná uložena, a také rozhoduje o rozsahu (viditelnosti) proměnné. Existují čtyři typy tříd úložiště - auto, externí, statické a registr. Spolu s proměnnou lze uvést jeden specifikátor úložiště.

Typy tříd úložiště v C

Typy tříd úložiště v C jsou následující

1. Třída automatického úložiště

Všechny proměnné deklarované v rámci funkce nebo bloku budou ve výchozím nastavení uloženy v automatickém specifikátoru, i když není explicitně definován. Specifikátorem této třídy úložiště je „auto“. Rozsah nebo viditelnost proměnných ve třídě automatického úložiště je místní pro blok nebo funkci, která je definována. Proměnná bude zničena, jakmile vyjdeme z funkce nebo bloku.

To lze lépe vysvětlit na příkladu. Zvažte příklad uvedený níže:

Kód:

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

Výstup:

4

2

Zde je nejprve deklarována proměnná I typu integer s hodnotou 2. Další uvnitř smyčky nebo bloku je opět deklarována proměnná I stejného typu celého čísla s přiřazenou hodnotou 4. Pokud specifikátor úložiště není uveden, bude ve výchozím nastavení považován za automatický. V prvním příkazu printf, který je uveden uvnitř bloku, se vytiskne 4 při tisku hodnoty I. Zatímco ve druhém příkazu printf, který je uveden mimo blok, se vytiskne hodnota I jako 2, hodnota, která je uvedena mimo blok. Je lepší inicializovat nějakou hodnotu do automatických proměnných, protože pokud není inicializace, může se stát, že někdy získáte nějakou hodnotu odpadu. Tento příklad poskytuje jasný obrázek o automatických proměnných ao místním rozsahu.

2. Zaregistrujte třídu úložiště

Proměnné uložené ve třídě úložiště registru budou mít také lokální rozsah, což znamená, že je přístupný nebo viditelný pouze v bloku, ve kterém je deklarován. Toto úložiště je podobné automatům, ale hlavní rozdíl je v tom, že automatické proměnné jsou uloženy v paměti, zatímco proměnné registrů jsou uloženy v registrech CPU. To se provádí, pokud chceme k proměnné přistupovat velmi často. Lze je použít rychleji. Pomocí specifikátorů registru je uloženo pouze několik proměnných. Pokud v registru není místo, je uložen pouze v paměti. K proměnným registru není přiřazena žádná počáteční hodnota. Operátor & (adresa) nelze použít také pro proměnné registru. Například proměnné, které se používají pro čítače nebo podobné typy použití, se ukládají pomocí specifikátoru registrů.

3. Statická třída skladování

Proměnná, ať už globální nebo lokální, se ukládá pomocí statického specifikátoru ve třídě statického úložiště, když proměnná musí být deklarována jednou a hodnota musí být zachována. Pokud je proměnná deklarována jako statická, bude hodnota uložena nebo zachována mezi voláními funkcí. Je vytvořeno trvalé úložiště a je deklarováno pouze jednou. Když je lokální proměnná deklarována jako statická, vytvoří se pro ni trvalé úložiště a hodnota se při každém použití zachová. Také podle rozsahu obvyklé místní proměnné jsou statické místní proměnné také viditelné pouze pro funkci nebo blok, kde je definována. Když je globální proměnná deklarována jako statická, podobná statické místní, vytvoří se trvalé úložiště a deklaruje se pouze jednou. Ale i když je globální, jsou tyto proměnné viditelné pouze v souboru, ve kterém jsou definovány.

Statické proměnné lze jasně znázornit pomocí níže uvedeného příkladu:

Kód:

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);
)

Výstup:

2

4

Zde, ve výše uvedeném programu, když je volána samplefunc (), je proměnná a definována a inicializována poprvé a je pro ni vytvořeno trvalé úložiště. Matematickým výrazem použitým ve funkci se pak hodnota 2. stává, ale když se tentokrát nazývá stejný samplefunc (), proměnná a není znovu definována nebo inicializována, spíše vezme poslední zachovanou hodnotu a pokračuje v operaci výsledný výsledek je 4. Toto je hlavní využití a výhod statických proměnných.

4. Externí třída skladování

Proměnná deklarovaná jako externí, ukazuje, že proměnná je definována jinde v jiném programu. Tyto vnější proměnné se používají, když chceme, aby se jakákoli proměnná nebo funkce definovaná v jednom programu použila také v jiném souboru. Proměnné s externím specifikátorem jsou uloženy ve třídě externího úložiště. Když je proměnná deklarována jako externí, je to program, určuje externí propojení, a proto není znovu definována ani inicializována. Úložiště je přiděleno pouze jedno a také inicializováno pouze jednou. Pokud jsou externí proměnné znovu inicializovány s jinou hodnotou v externím programu, zobrazí se chybová zpráva „Předefinování proměnné“.

Vnější proměnné jsou vysvětleny pomocí následujícího příkladu:

Kód:

Prg1.c

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

Prg2.c

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

Výstup:

10

Zde je počet proměnných celého čísla deklarován v prvním programu C (Prg1.c) a uvnitř hlavní funkce je inicializován na hodnotu 10. Ve druhém programu C je stejná proměnná počtu deklarována pomocí externího specifikátoru, který specifikuje, že existuje externí propojení a hodnota je načtena z úložiště a hodnota 10 je přiřazena počtu hodnot, když ji vytiskneme ve druhém programu. Toto je použití externích proměnných. V závislosti na odlišném účelu jsou tedy jednotlivé třídy úložiště použity pro vhodné proměnné a je deklarováno s odpovídajícími specifikátory.

Doporučené články

Toto je průvodce třídami úložiště C. Zde diskutujeme typy tříd úložiště, které zahrnují třídu automatického úložiště, třídu registrace úložiště, statickou třídu úložiště a třídu externího úložiště. Další informace naleznete také v následujících článcích -

  1. Co je JavaBeans?
  2. ES6 vs. ES5
  3. C ++ vs Visual C ++
  4. C vs C ++ výkon

Kategorie: