Wątek przeniesiony 2017-11-27 15:42 z C/C++ przez kq.

Przypisanie pamięci poprzez new do wskaźnika

0

Witam.
Mam taki kawałek kodu i chciałbym zapytać się co to jest liczba , *liczba to wartość adresu na jaki wskazuje ten wskaźnik, no a &liczba to ten adres . Czy liczba i &liczba nie powinny wyświetlać tego samego adresu?

	int* liczba;
	liczba = new int;

	cout << liczba << endl;
	cout << *liczba << endl;
	cout << &liczba << endl;

Konsola:

029ACE20
-842150451
0053FDE8

Pozdrawiam.

2

liczba wskazuje na adres wskaznika, a &liczba wskazuje na adres obiektu (new int) ktory jest przechowywany w wskazniki a z kolei *liczba to wyłuskanie wartości.

2

Nie powinny. Wskaźnik to zmienna. liczba to wartość tej zmiennej, czyli adres zaalokowanej pamięci. *liczba to dereferencja wskaźnika, czyli uzyskanie wartości liczby, na którą wskazuje. &liczba to adres zmiennej - wskaźnika, czyli inaczej mówiąc wskaźnik na wskaźnik.

0

Czyli wskaźnik ma swój adres w pamięci, sam jest zmienną, która przechowuje adres innej zmiennej tak? :D
Doszedłem do czegoś takiego *liczba = *(*(&liczba)) .
Cięższe są wskaźniki niż się wydają.

0

Wskaźnik to po prostu adres w pamięci, adres jest tak naprawdę unsign int, rozmiar inta zależy od platformy.

3
JareKanarek napisał(a):

Czyli wskaźnik ma swój adres w pamięci, sam jest zmienną, która przechowuje adres innej zmiennej tak? :D

Tak. To znaczy: zmienna typu wskaźnikowego jest (oczywiście) zmienną, i ma adres.

int *wskaznik;

wskaznik przechowuje adres jakiegoś inta, ale sam jest zmienną (typu int*) i ma adres.

Ale jeśli wskaźnik jest tylko elementem wyrażenia, np.

int liczba;
cout << &liczba;

to wskaźnik &liczba nie ma określonego własnego adresu, podobnie jak nie ma adresu np. literał liczbowy.

cout << 123; // ta liczba nie ma adresu

1 użytkowników online, w tym zalogowanych: 0, gości: 1