Wskaźnik a referencja

Wskaźnik a referencja
IX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

Może mi ktoś do tego kodu napisać co jest wskaźnikiem, a co referencją i dlaczego w 3 częściach adres wyświetla się inaczej (czyli najprościej ujmując napisać komentarze do linijek) bo ja już oczopląsów dostaję. Dzięki

Kopiuj
 #include<iostream>
using namespace std;
int main()
{
int x = 0;
int *px = &x;
int **ppx = &px;

 cout << "x = " << x << endl;
 cout << "**ppx = " << **ppx << endl;
 cout << "*px = " << *px << endl << endl;
 cout << "&x = " << &x << endl;
 cout << "px = " << px << endl;
 cout << "&**ppx = " << &**ppx << endl;
 cout << "&*px = " << &*px << endl; 
 cout << "*ppx = " << *ppx << endl<< endl;

 cout << "&px = " << &px << endl;
 cout << "ppx = " << ppx << endl << endl;

 cout << "&ppx = " << &ppx << endl;

return 0;
}
twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2

Przecież tu nie ma żadnej referencji.

EH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0

Wyświetlasz zmienną, zwartość wskaźnika który na nią pokazuje, wskaźnik który pokazuje na wskaźnik itd.

Kopiuj
void funkcja(int &argument_przekazany_przez_referencję)
{
        //....
}

powyżej masz jak przekazać argument przez referencję, czyli oryginał zmiennej. Ale używając po porostu ampersanda wyświetlasz(w tym przypadku) adres danego obiektu/zmiennej.

IX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 38
0

a to co oznaczając poszczególne literały

Kopiuj
*

&

oraz ich połączenie

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

* - operator wyłuskania wskaźnika;
& - operator adresu obiektu;

Kopiuj
 
//	Referencja.
//	Przekazujesz do funkcji adres zmiennej typu int;
void foo(int &ref){
	ref = 0;
}
EH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 20
0
Kopiuj
//deklarujesz zmienną
int i = 5;
//deklarujesz wsakźnik
//używając '&' zapisujesz w nim adres zmiennej i
int * wsk = &i;
//zwiększasz zmienną o jeden używając wskaźnika z operatorem '*'
*wsk++;
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2

To zależy GDZIE.
int* zmienna -> gwiazdka oznacza że typem zmiennej jest wskaźnik do inta
*zmienna -> gwiazdka oznacza wyłuskanie/dereferencje czyli pobranie wartości z pamięci na którą wskazuje wskaźnik
&zmienna -> pobranie adresu zmiennej
void funkcja(int& zmienna) -> argumentem funkcji jest referencja do zmiennej, czyli nie zostanie utworzona lokalna kopia zmiennej wewnątrz funkcji i w efekcie zmiana wartości tej zmiennej wewnątrz funkcji będzie widoczna także poza funkcją (normalnie tak nie jest!)

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.