Pokud sledujete naši sérii výukových programů pro programování v jazyce C, měli byste si být vědomi konceptu proměnných. Zatímco jsme diskutovali o základech proměnných, je zde ještě jeden důležitý aspekt související s proměnnými, o kterém zde budeme diskutovat:rozsah proměnných .
Začněme s kódem pro výměnu hodnot, který jsme použili v jednom z našich předchozích tutoriálů:
#include
void swap (int val1, int val2)
{
int temp =0;
temp =hodnota1;
hodnota1 =hodnota2;
hodnota2 =teplota;
printf("\nVyměněné hodnoty jsou:%d a %d", hodnota1,val2);
}
int main()
{
int a=0, b=0;
printf("Zadejte dvě celá čísla hodnoty\n");
scanf("%d %d",&a,&b);
printf("Zadané hodnoty jsou:%d a %d", a,b);
swap(a,b);
návrat 0;
}
Zde, v tomto kusu kódu, mají proměnné 'val1' a 'val2' lokální rozsah, což znamená, že ožívají, když je zavolána funkce 'swap', a zaniknou, jakmile skončí volání 'swap'. Prostě nemůžete přistupovat k 'val1' a 'val2' před nebo po volání funkce 'swap'. Podobně rozsah proměnných 'a' a 'b' je také lokální - lokální pro funkci 'main'.
Všimněte si, že tyto proměnné lokálního rozsahu jsou také známé jako automatické proměnné.
Nyní, zatímco proměnné s lokálním rozsahem jsou omezeny na blok, ve kterém jsou deklarovány, existuje další typ proměnných, jejichž rozsah je globální. Jak název napovídá, proměnné globálního rozsahu lze použít napříč funkcemi. Například proměnná 'var' je globální celočíselná proměnná a lze ji použít ve funkcích 'main' i 'swap'.
#include
int var;
void swap (int val1, int val2)
{
int temp =0;
teplota =hodnota1;
hodnota1 =hodnota2;
hodnota2 =teplota;
printf("\nVyměněné hodnoty jsou:%d a % d", val1,val2);
}
int main()
{
int a=0, b=0;
printf("Zadejte dvě celočíselné hodnoty\n");
scanf("%d %d",&a,&b);
printf(" Zadané hodnoty jsou:%d a %d", a,b);
swap(a,b);
návrat 0;
}
Ve výchozím nastavení je globálním proměnným přiřazena hodnota '0'. Ale to není případ lokálních proměnných – musíte jim přiřadit hodnotu, když jsou definovány, jinak obsahují nesmyslnou hodnotu. Například v následujícím programu:
#include
int var;
int main()
{
int a;
printf("Místní proměnná 'a' aktuálně obsahuje:%d", a);
printf("\n Globální proměnná var aktuálně platí:%d", var);
vrátí 0;
}
Existuje vysoká pravděpodobnost, že pro „a“ získáte nenulovou hodnotu. Na druhou stranu 'var' bude na začátku vždy nula.
Pokračujeme, mohou existovat globální a místní proměnné stejného jména? No, odpověď je ano. Dobře, co tedy ve výstupu vytvoří následující část kódu:
#include
int var =5;
int main()
{
int var =10;
printf("Místní proměnná 'a' aktuálně obsahuje:%d", var);
printf("\n Globální proměnná var aktuálně obsahuje:%d", var);
vrátí 0;
}
No, výstup bude '10' v obou případech. Důvodem je, že lokální proměnná 'var' přepíše globální 'var'. Takže další logickou otázkou je, jak v tomto případě přistupovat ke globálnímu „var“ uvnitř „hlavního“? Bohužel odpověď je NE. Ve skutečnosti byste se při práci s jazykem C neměli dostávat do takových situací.
Dále přichází koncept „externích“ proměnných. Laicky řečeno, použitím klíčového slova 'extern' s jakoukoli deklarací proměnné říkáte kompilátoru, že tato proměnná je již deklarována/definována někde jinde a my ji zde pouze používáme. Například v následující části kódu kompilátor neví, že existuje 'var', když se pokouší zkompilovat příkaz printf uvnitř hlavní funkce.
#include
int main()
{
printf("\n Globální proměnná var aktuálně platí:%d", var);
návrat 0;
}
int var =5;
Proto se během kompilace zobrazí chyba podobná následující:
main.c:Ve funkci 'main':
main.c:14:58:chyba:'var' nedeklarováno (první použití v této funkci)
printf("\n Globální proměnná var aktuálně drží:%d", var);
^
main.c:14:58:poznámka:každý nedeklarovaný identifikátor je hlášen pouze jednou pro každou funkci, ve které se vyskytuje
Ale pokud zde deklarujete 'var' jako externí, uvidíte, že vše funguje dobře. Je to proto, že se kompilátor nakonec dostane k původní deklaraci 'var'.
#include
int main()
{
extern int var;
printf("\n Globální proměnná var aktuálně obsahuje:%d", var);
return 0;
}
int var =5;
A získáte správný výstup:
Globální proměnná var aktuálně platí:5
Takže takhle funguje externista. Externí proměnné se často používají, když je váš program/projekt rozdělen do více souborů zdrojového kódu a chcete, řekněme, použít v 'file1', proměnnou definovanou v 'file2'.
A konečně, když diskutujeme o proměnných rozsahech, bylo by lepší, kdybychom zde také diskutovali o „statických“ proměnných. Statické proměnné jsou speciální v tom smyslu, že si zachovávají svou hodnotu i poté, co opustí rozsah. To znamená, že jsou inicializovány pouze jednou, což je poprvé.
static int counter
Následuje část kódu, která používá statickou proměnnou k počítání, kolikrát byla funkce volána.
#include
int swap (int hodnota1, int hodnota2)
{
statické počítadlo int =1;
int temp =0;
teplota =hodnota1;
hodnota1 =hodnota2;
hodnota2 =teplota;
printf("\n Funkce volaná %d krát\n" , counter);
counter++;
}
int main()
{
int a=9, b=4;
swap(a,b);
swap(a,b);
swap(a,b);
návrat 0;
}Zde je výstup:
Funkce volána 1krát
Funkce volána 2krát
Funkce volána 3krátTakže můžete vidět, že proměnná 'counter' si zachovala svou hodnotu i poté, co byla mimo rozsah. Stejně jako globální proměnné mají i statické proměnné výchozí hodnotu '0'.
V tomto tutoriálu jsme diskutovali o několika důležitých konceptech, které se všechny týkají rozsahu proměnných v programovacím jazyce C. Nezapomeňte si vytvořit vlastní programy, abyste lépe pochopili rozdíl mezi externími, statickými, globálními a lokálními proměnnými. A jako vždy, v případě jakýchkoli pochybností nebo dotazů, napište komentář níže.
C Výukový program programování Část 5 - Znakové proměnné Výukový program programování v Linuxu C Část 9:ŘetězceLinux