#include <iostream>
using namespace std;
/* PO CO podwójny wskaźnik?
ETAP 1.
Gdy przekazujemy do podfunkcji wskaźnik, to: adres na który wskazuje
jest przekazany dobrze, ale sam wskaźnik (jako pojemnik) w podfunkcji - to kopia.
Gdyby w podfunkcji próbować wskaźnikowi zmienić wskazywaną zmienną,
to po powrocie do main() zmiana nie poskutkuje: nie pracowaliśmy na oryginalnym wskaźniku.
ETAP 2.
Można jednak przenosić ... adres powyższego wskaźnika.
Do tego służy podwójny wskaźnik, czyli double** .
Mając w podfunkcji adres oryginalnego wskaźnika, można mu zmienić wskazywaną zmienną.
*/
void funpointer (double* ptr)
{
cout << "[fun (double* )] Adres wskazywanej zmiennej : " << ptr << endl;
double y;
ptr = &y;
cout << "[fun (double* )] Adres wskazywanej zmiennej : " << ptr << endl;
}
void fun_doublepointer ( double** ptr2 )
{
cout << "[fun (double**)] Adres wskazywanej zmiennej : " << *ptr2 << endl;
double y; // Uwaga: procedura nie jest bezpieczna, bo po funkcji ta zmienna przestanie istnieć.
*ptr2 = &y;
cout << "[fun (double**)] Adres wskazywanej zmiennej : " << *ptr2 << endl;
}
int main ()
{
double x = 10;
double* ptrmain = &x;
cout << "[ main () ] Adres wskazywanej zmiennej : " << ptrmain << endl;
funpointer ( ptrmain );
cout << "[ main () ] Adres wskazywanej zmiennej : " << ptrmain << endl;
cout << "\n\n";
fun_doublepointer ( &ptrmain );
cout << "[ main () ] Adres wskazywanej zmiennej : " << ptrmain << endl;
return 0;
}