Autor: Dondu
Kurs języka C: Spis treści
Zmienne lokalne to zmienne, które są dostępne tylko i wyłącznie w jakiejś funkcji lub jej części.
W artykule o zmiennych globalnych poznałeś już typ zmiennej, która dostępna jest w każdej części programu. Nie zawsze jednak chcemy, by zmienna była zmienną globalną. Czasami przyda się nam zmienna, która będzie dostępna tylko w jakiejś funkcji, czy wręcz tylko w jej części.
Zmienna lokalna dostępna w całej funkcji
To najczęściej wykorzystywany przypadek zmiennej lokalnej. Zmienna taka jest widziana tylko i wyłącznie w danej funkcji.
Przykład 1 (w kompilatorze)
int main(void) { //zmienna lokalna dostępna tylko dla funkcji main() char ilosc_koni = 5; //wyświetl zmienną printf("ilosc_koni = %d \n", ilosc_koni); return 0; }
Sprawdźmy, czy na pewno tak zdefiniowana zmienna jest widziana tylko w funkcji main(). W tym celu zdefiniujemy sobie dodatkową funkcję pokaz(), w której spróbujemy użyć zmiennej lokalnej zdefiniowanej w funkcji main().
Przykład 2 (w kompilatorze)
void pokaz(void){ //wyświetl zmienną printf("W pokaz() ilosc_koni = %d \n", ilosc_koni); } int main(void) { //zmienna lokalna dostępna tylko dla funkcji main() char ilosc_koni = 5; //wyświetl zmienną printf("W main() ilosc_koni = %d \n", ilosc_koni); //wywołaj funkcję pokaz() pokaz(); return 0; }
Na potwierdzenie tego, że zmienna ilosc_koni jest dostępna tylko w funkcji main() kompilator zaprotestował komunikatem:
4: error: ‘ilosc_koni’ undeclared (first use in this function)
czyli informacją o tym, że w linii nr 4, czyli funkcji pokaz(), używamy niezadeklarowanej zmiennej ilosc_koni.
Kurs języka C: Spis treści
5
Brakuje przykładu zmiennej lokalnej dostępnej tylko w części funkcji, np.
OdpowiedzUsuńvoid funkcja(void){
char lokalna_w_calej = 5;
// jakiś kod
{
char lokalna_w_czesci = 3;
// wyświetl zmienną, tu powinien ją widzieć
printf("lokalna_w_czesci = %d \n", lokalna_w_czesci);
}
// wyświetl zmienną, tu kompilator powinien zaprotestować
printf("lokalna_w_czesci = %d \n", lokalna_w_czesci);
}
Zmienna dostępna w części kodu może być zdefiniowana wewnątrz nawiasu klamrowego z niczym nie związanego lub też nawiasu klamrowego będącego częścią if, switch / case itp.
Ciekawym przykładem może być z tego co pamiętam takie coś:
int main(void){
char zmienna = 5;
if(zmienna == 5){
char zmienna = 1; // deklaracja zmiennej widocznej tylko wewnątrz if, a mającej taką samą nazwę :)
printf("zmienna wewnątrz if = %d \n", zmienna);
zmienna++;
// wyświetl zmienną po inkrementacji
printf("zmienna po inkrementacji = %d \n", zmienna);
}
// jaką wartość ma zmienna po wyjściu z if?
printf("zmienna po wyjściu z if = %d \n", zmienna);
return 0;
}
Ajć, teraz widzę, że ta część jest opisana w "zmienna lokalna blokowa" ;) W artykule przydałby się link, że lokalna dostępna w części opisana jest w artykule -> link. Ale mój drugi przykład i tak jest fajny i jeśli chcecie, możecie go dodać, bo ten obecny nie w pełni obrazuje "przykrywanie", a jedynie pokazuje niedostępność poza blokiem ;)
Usuń