Witam
Proszę o pomoc w zrozumieniu mechanizmu ustalającego adres wskaźnika. W standardowym sposobie inicjalizacji wskaźnika (bez użycia operatora 'new') adres pod którym znajduje się wartość przypisana do zmiennej jest ustalana za pomocą 'ampersanda' np.: &nazwazmiennej. I to jest jasne i klarowne.
Natomiast (jeśli dobrze rozumiem) przy użyciu operatora 'new' adres jest ustalany i przypisywany z automatu do zarezerwowanej pamięci, bez konieczności użycia 'ampersanda' i to też rozumiem.
Jednak nie wiem dlaczego przy automatycznym rezerwowaniu pamięci (new), sprawdzając adres zarezerwowanej pamięci poprzez cout << pd ... (patrz zamieszczony poniżej przykład /wskaźnik 'double*pd'/) otrzymuję inny adres niż używając 'ampersanda' &pd.
Mam nadzieję, że wyraziłem sie w miarę jasno.
int main()
{
using namespace std;
int nights = 1001;
int * pt = new int; // alokacja pamięci na wartość int
*pt = 1001; // zapis tam wartości
cout << "wartosc nights = ";
cout << nights << ": polozenie " << &nights << endl;
cout << "int ";
cout << "wartosc = " << *pt << ": polozenie = " << pt << endl;
double * pd = new double; // alokacja pamięci na wartość double
*pd = 10000001.0; // zapis tam wartości
cout << "double: ";
cout << "wartosc = " << *pd << ": polozenie = " << pd << endl;
cout << "polozenie wskaznika pd: " << &pd << endl; // dlaczego to jest różne od wartości z wiersza powyżej !!!!
cout << "wielkosc pt = " << sizeof(pt);
cout << ": wielkosc *pt = " << sizeof(*pt) << endl;
cout << "wielkosc pd = " << sizeof pd;
cout << ": wielkosc *pd = " << sizeof(*pd) << endl;
return 0;
}