W tym samouczku dowiesz się o zakresie i czasie życia zmiennych lokalnych i globalnych. Dowiesz się również o zmiennych statycznych i rejestrowych.
Każda zmienna w programowaniu w C ma dwie właściwości: typ i klasę pamięci.
Typ odnosi się do typu danych zmiennej. A klasa pamięci określa zakres, widoczność i czas życia zmiennej.
Istnieją 4 rodzaje klas pamięci:
- automatyczny
- zewnętrzny
- statyczny
- zarejestrować
Zmienna lokalna
Zmienne zadeklarowane wewnątrz bloku są zmiennymi automatycznymi lub lokalnymi. Zmienne lokalne istnieją tylko wewnątrz bloku, w którym zostały zadeklarowane.
Weźmy przykład.
#include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )
Po uruchomieniu powyższego programu otrzymasz niezadeklarowany identyfikator błędu i. Dzieje się tak, ponieważ i jest zadeklarowane wewnątrz for
bloku pętli. Poza blokiem jest niezadeklarowany.
Weźmy inny przykład.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
W powyższym przykładzie n1 jest lokalna, main()
a n2 lokalna func()
.
Oznacza to, że nie możesz uzyskać dostępu do zmiennej n1 wewnątrz, func()
ponieważ istnieje ona tylko wewnątrz main()
. Podobnie, nie możesz uzyskać dostępu do zmiennej n2 wewnątrz, main()
ponieważ istnieje ona tylko wewnątrz func()
.
Zmienna globalna
Zmienne zadeklarowane poza wszystkimi funkcjami nazywane są zmiennymi zewnętrznymi lub globalnymi. Są dostępne z dowolnej funkcji w programie.
Przykład 1: zmienna globalna
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Wynik
n = 7
Załóżmy, że zmienna globalna jest zadeklarowana w file1
. Jeśli spróbujesz użyć tej zmiennej w innym pliku file2
, kompilator będzie narzekać. Aby rozwiązać ten problem, zastosowano słowo kluczowe extern
in, file2
aby wskazać, że zmienna zewnętrzna jest zadeklarowana w innym pliku.
Zarejestruj zmienną
Słowo register
kluczowe służy do deklarowania zmiennych rejestrowych. Zmienne rejestrowe miały być szybsze niż zmienne lokalne.
Jednak nowoczesne kompilatory są bardzo dobre w optymalizacji kodu i istnieje rzadka szansa, że użycie zmiennych rejestru przyspieszy program.
Jeśli nie pracujesz na systemach wbudowanych, w których wiesz, jak zoptymalizować kod dla danej aplikacji, nie ma zastosowania zmiennych rejestrowych.
Zmienna statyczna
Zmienna statyczna jest deklarowana przy użyciu static
słowa kluczowego. Na przykład;
static int i;
Wartość zmiennej statycznej utrzymuje się do końca programu.
Przykład 2: Zmienna statyczna
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Wynik
6 11
Podczas pierwszego wywołania funkcji wartość c jest inicjalizowana na 1. Jej wartość jest zwiększana o 5. Teraz wartość c wynosi 6, co jest drukowane na ekranie.
Podczas drugiego wywołania funkcji c nie jest ponownie inicjowana na 1. Dzieje się tak, ponieważ c jest zmienną statyczną. Wartość c zwiększa się o 5. Teraz jej wartość wyniesie 11, co jest wydrukowane na ekranie.