35
CZYM SĄ ZMIENNE?
int a=l; /* zmienna globalna */
int main()
int a=2; /* to już zmienna lokalna */
printf ("W, a); /* wypisze 2 */
Czas życia to czas od momentu przydzielenia dla zmiennej miejsca w |>a mięci (stworzenie obiektu) do momentu zwolnienia miejsca w j>a mięci (likwidacja obiektu). Zakres ważności to część programu, w której nazwa znana jest kompilatorowi.
main()
int a ■ 10;
{ /* otwarcie lokalnego bloku */
int b - 10;
printf ("'/.d '/.d", a, b) ;
> /* zamknięcie lokalnego bloku, zmienna b jest usuwana */
printf ("7«d */,d", a, b); /* BŁĄD: b juz nie istnieje */
} /• tu usuwana jest zmienna a •/
Zdefiniowaliśmy dwie zmienne typu int. Zarówno o i b istnieję przez cały program (czas życia). Nazwa zmiennej a jest znana kompilatorowi przez cały program. Nazwa zmiennej b jest znana tylko w lokalnym bloku, dlatego nastąpi błąd w ostatniej instrukcji.
Niektóre kompilatory (prawdopodobnie można tu zaliczyć Microsoft Visual C++ do wersji 2003) uznają powyższy kod za poprawny! W dodatku można ustawić w opcjach niektórych kompilatorów zachowanie w takiej sytuacji, włącznie z zachowaniami niezgodnymi ze standardem języka!
Możemy świadomie ograniczyć ważność zmiennej do kilku linijek programu (tak j.ik robiliśmy wyżej) tworząc bk)k. Nazwa zmiennej jest znana tylko w tym bloku.
>
Stała, różni się od zmiennej tylko tym, że nie można jej przypisać innej wartości w trakcie działania programu. Wartość stałej ustala się w kodzie programu i nigdy ona nie ulega zmianie. Stałą deklaruje się z użyciem słowa kluczowego const w sposób następujący:
const typ nazwa.stałej-wartość;