Przypisanie pamięci poprzez new do wskaźnika

Przypisanie pamięci poprzez new do wskaźnika

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

JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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?

Kopiuj
	int* liczba;
	liczba = new int;

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

Konsola:

Kopiuj
029ACE20
-842150451
0053FDE8

Pozdrawiam.

daniel1302
  • Rejestracja: dni
  • Ostatnio: dni
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.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

JK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
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ą.

xxx_xx_x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 365
0

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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.

Kopiuj
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.

Kopiuj
int liczba;
cout << &liczba;

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.