Wpis z mikrobloga

referencja do wskaznika, co ona oznacza?
W sensie mam taki kod:

void push(elem *&stos, int x) {

elem *e = new elem;
e->dane = x;
e->nast = stos;

stos = e;
}

nie rozumiem, jak to (elem *& stos) ma prawo działać.
Ma ktoś przy okazji jakiś link, gdzie naprawdę łopatologicznie jest wytłumaczona referencja od wskaźnika i jest poruszony ten przykład? Błagam o pomoc!

#cpp #programowanie
  • 8
  • Odpowiedz
@Trusiak: referencja na wskaźnik działa dokładnie tak samo jak referencja na cokolwiek innego. wskaźnik jest gdzieś indziej, funkcja otrzymuje referencję na niego.
  • Odpowiedz
Bardziej czytelny byłby zapis: void push(elem* &stos, int x) { (inaczej wstawiona spacja), czyli referencja na dane typu elem*.
W ogólności void push(T &stos, int x) {, czyli typ T to jest to właśnie elem*.
  • Odpowiedz
@Trusiak: referencja na wskaźnik to dość specyficzna konstrukcja i używać jej powinieneś tylko wtedy, jeśli chcesz coś zrobić z samym wskaźnikiem, który przychodzi do funkcji.

Chodzi o to, że wskaźnik przekazany do funkcji sam jest obiektem, który podlega kopiowaniu. Jeśli nie chcesz, żeby do funkcji trafiła kopia wskaźnika, przekazujesz go właśnie przez referencję.
  • Odpowiedz
@M4ks: @inplaz: @mrhahn: @KrzaQ2: @enceladus71:
Dziękuje wam! Wiem, że to trochę dużo o co teraz poproszę, ale nie do końca rozumiem to w jaki sposób jest to opisane na internecie (natomiast jestem juz coraz bliżej).
Jeżeli ktoś z was mógłby jeszcze mi jakoś łopatologicznie wytłumaczyć i wyprowadzić mnie z błedu w którym tkwie.. @mrhahn zwłaszcza ty masz do tego talent.

Chodzi mi o to, jak ta procedura odkładania
  • Odpowiedz
@Trusiak:
2) push tworzy sobie *obiekt* typu elem z dynamicznym czasem ƶycia. Wskaźnik do niego przypisuje do wskaźnika nowy.
3,4 ) przypisuje do nowy wartości wskaźnika do obecnego szczytu stosu oraz x
5) nadpisuje wskaźnik szczytu stosu
  • Odpowiedz
@Trusiak: to co tu pokazujesz to fragment implementacji listy. idea jest taka że na liście znajduje się nieokreślona liczba elementów, każdy element oprócz własnej zawartości (int dane) zawiera wskaźnik na następny element (elem* nast). Mając wskaźnik na pierwszy element możesz dostać się jak po nitce do każdego kolejnego.
Funkcja push dodaje nowy element na początek listy: alokuje go dynamicznie (na stercie) i inicjalizuje jego dane.
Element ma mieć wskaźnik na
  • Odpowiedz