Почему у указателя два адреса?
pd адрес переменной, а &pd адрес на другой блок памяти или тип данных? pd храниться в стеке, а &pd в куче?
double* pd = new double;
*pd = 10.3;
cout << "*pd = " << *pd<<endl;
cout << "pd = " << pd << endl;
cout << "&pd = " << &pd << endl;
результат
*pd = 10.3
pd = 00B0D7A0
&pd = 0093FDF8
Ответы (2 шт):
&pd - это адрес ячейки, где хранится сам указатель pd. Логично, что у него другой адрес.
pd хранится скорее всего в стеке (хотя если это переменная-член класса, то может быть и в куче).
То, куда указывает pd (&pd) в данном случае скорее всего хранится в куче (да, можно переопределить new и тогда можно разместить даже в стеке).
"где хранится &pd" - а это выражение, ему не нужно явно хранится, пока его не сохранят.
Какие "два разных адреса"?
cout << "*pd = " << *pd<<endl;
Это значение, находящееся по адресу, хранящемуся в переменной pd.
cout << "pd = " << pd << endl;
Это значение адреса, хранящееся в переменной pd.
cout << "&pd = " << &pd << endl;
Это адрес в памяти, где хранится переменная pd.
Это все - разные значения...