Czym jest w języku C++ element zadeklarowany zapisem double **x;?
Każda gwiazdka w deklaracji dodaje jeden poziom wskaźnika. Zapis double *p to wskaźnik na liczbę typu double, a double **x - wskaźnik na taki wskaźnik, czyli zmienna przechowująca adres innego wskaźnika. Do wartości liczbowej dochodzi się przez podwójne wyłuskanie: **x. Przykład: po zapisach double a = 1.5;, double *p = &a; i double **x = &p; instrukcja **x = 2.0; zmieni wartość zmiennej a. Wskaźników na wskaźniki używa się m.in. przy dynamicznych tablicach dwuwymiarowych i w funkcjach, które mają zmienić sam wskaźnik przekazany jako argument. Do zapamiętania: liczba gwiazdek w deklaracji to liczba poziomów pośredniości.
Gwiazdki w deklaracji nie mają nic wspólnego z mnożeniem ani potęgowaniem - zmienna podniesiona do kwadratu nie jest typem, tylko wynikiem obliczenia, np. x * x. Tablicę deklaruje się nawiasami kwadratowymi z rozmiarem, double t[2];, a nie gwiazdkami, choć wskaźnik na wskaźnik bywa potem używany do obsługi tablic dynamicznych. Referencja ma w deklaracji znak &, np. double &r = a;, i jest drugą nazwą istniejącej zmiennej, bez osobnego adresu. W zapisie double **x są dwie gwiazdki, więc zmienna x przechowuje adres wskaźnika, który z kolei przechowuje adres liczby typu double. To dwa poziomy pośredniości: wskaźnik na wskaźnik. Zawsze licz gwiazdki stojące w deklaracji między typem a nazwą: jedna oznacza zwykły wskaźnik, dwie - wskaźnik na wskaźnik, trzy - kolejny poziom. Żadna z nich nie zmienia typu wartości, do której ostatecznie prowadzą wskaźniki.