Zmienna w C++

Podstawowe informacje o zmiennych w języku C++ takie takie zasięg, zakres widoczności, przesłonięcia, czy także zmienne globalne, lokalne opisane na przykładach

Zasięg deklaracji to ta część programu, gdzie deklaracja jest aktywna. Zakres widoczności to ten fragment (fragmenty) kodu, w którym nazwa identyfikatora jest związana z tą deklaracją. Zakres widoczności może być węższy niż zasięg deklaracji na skutek przesłonięcia.
- Zmienne zadeklarowane poza funkcjami (zmienne globalne) są widoczne od miejsca deklaracji do końca pliku. Mogą być widoczne w innych modułach/plikach jeżeli są zadeklarowane z identyfikatorem extern.
- Zmienne lokalne definiowane są wewnątrz funkcji. Ich zasięg obejmuje część programu od miejsca deklaracji do końca funkcji.
- Zmienne globalne mogą być przesłonięte. Jeżeli wewnątrz funkcji zadeklarujemy zmienną o tej samej nazwie to przesłoni ona zmienną globalną.
- Dostęp do przesłoniętej zmiennej globalnej uzyskamy poprzez operator zasięgu :: dodany przed nazwą zmiennej: ::Zmienne
#include<iostream>
using namespace std;

int zmienna = 5;

int main()
	{
	char zmienna = 'A';
	cout << zmienna << endl;
	cout << ::zmienna << endl;
	}
- Zmienne statyczne to takie, które nie znikają po wykonaniu się danej funkcji (zmienne lokalne). Zmienne statyczne deklaruje się z modyfikatorem static. Dla zmiennych globalnych niby nic się niezmienia - ale - do zmiennych globalnych statycznych nie można się odwołać w innych modułach/plikach. Dla zmiennych lokalnych wartość zmiennych nie znika po wyjściu sterowania z tejże funkcji. Oto przykład:
#include<iostream>
using namespace std;

void nic(int param)
	{
	int stat;
	if (param > 1)
		{
		stat = 10;
		}
	cout << "STAT: " << stat << " PARAM: " << param << endl;
	}

int main()
	{
	nic(2);
	cout << "Bla bla bla" << endl;
	nic(1);
	}
Funkcja main wywołuje funkcję nic, która oczekuje jednego parametru, liczby całkowitej. Jeżeli parametr jest większy od 1 to zmiennej stat przypisywana jest wartość 10 i do konsoli leci ładny tekst, jeżeli jest mniejsza, równa to tylko wyświetli się tekst. Wykonanie programu da nam:
STAT: 10 PARAM: 2
Bla bla bla
STAT: 0 PARAM: 1
W drugim wywołaniu z parametrem 1 funkcja nic nie przypisuje wartości zmiennej stat i otrzymujemy 0 - straciliśmy wcześniejszą wartość zmiennej bo zmienna przestała istnieć... A ze static:
#include<iostream>
using namespace std;

void nic(int param)
	{
	static int stat;
	if (param > 1)
		{
		stat = 10;
		}
	cout << "STAT: " << stat << " PARAM: " << param << endl;
	}

int main()
	{
	nic(2);
	cout << "Bla bla bla" << endl;
	nic(1);
	}
STAT: 10 PARAM: 2
Bla bla bla
STAT: 10 PARAM: 1
Wartość zmiennej stat (jak i ona sama) "przeżyła" :)
blog comments powered by Disqus

Kategorie

Strony