Klasa pamięci C.

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:

  1. automatyczny
  2. zewnętrzny
  3. statyczny
  4. 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 forbloku 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 externin, file2aby wskazać, że zmienna zewnętrzna jest zadeklarowana w innym pliku.

Zarejestruj zmienną

Słowo registerkluczowe 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 staticsł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.

Interesujące artykuły...