Problem ze wskaźnikami/referencjami

Problem ze wskaźnikami/referencjami
PL
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 14 lat
0

Witam.
Programuje już pewien czas w C++ (poziom wyżej niż podstawowy) i nie mogę znaleźć dobrego wytłumaczenia odnośnie wskaźników..
Podstawowe operacja na wskaźnikach rozumiem dobrze, ale problem się zaczyna kiedy widzę tego typu konstrukcje:

  • typ_zwracany nazwa_funkcji (char**& );
  • typ_zwracany nazwa_funkcji (char*& );
  • typ_zwracany nazwa_funkcji (char** & );
  • typ_zwracany nazwa_funkcji (char** );

zamiast char'a oczywiście mogą być inne struktury danych, ale to tylko przykład.
Może mi ktoś wyjaśnić, najlepiej na przykładzie? Albo za jakiś pomocny link byłbym wdzięczny.

edytowany 1x, ostatnio: plancys
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Czytanie deklaracji to poziom niżej niż podstawowy...
char**& -> referencja do wskaźnika na wskaźnik do char
char*& -> referencja do wskaźnika do char
char** -> wskaźnik do wskaźnika do char

Załóżmy że chcesz wewnątrz funkcji zaalokować pamięć i zwrócic jako argument (bo np. przez wartość zwracasz już coś innego):

Kopiuj
void funkcja(char*& wskaznik)
{
  wskaznik = new char[100];
}

//
int main()
{
  char* wskaznik;
  funkcja(wskaznik);
}

Gdyby & tam nie było to niestety alokowałbyś pamięć do lokalnej KOPII wskaźnika a nie do oryginału.
Analogicznie ma się sytuacja z **& ale mógłbyś alokować tablicę "dwuwymiarową"

Można równie dobrze zrobić to tak:

Kopiuj
void funkcja(char** wskaznik)
{
  *wskaznik = new char[100];
}

//
int main()
{
  char* wskaznik;
  funkcja(&wskaznik);
}

Ale jest to trochę mniej czytelne.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

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.