поэтому у меня есть фрагмент кода, который должен печатать адрес номера и адрес ptr. Это код:C++ разница между% p и cout & ptr
int main() {
float number1 = 1;
float number2;
float *fPtr;
fPtr = &number1;
cout << "Value of object pointed to by fPtr: " << *fPtr << endl;
cout << "Value of number 2: " << number2 << endl;
cout << "Address of number 1: " << &number1 << endl;
printf("%p\n", &number1);
cout << "Address fPtr: " << &fPtr << endl;
printf("%p", fPtr);
return 0;
}
Выход:
Значение объекта, на который указывает fPtr: 1
Значение числа 2: 0
Адрес № 1: 0xbfb7e348
0xbfb7e348
Адрес е Ptr: 0xbfb7e34c
0xbfb7e348
Почему два адреса печатаются с использованием спецификатора% р Конверсионные же? При использовании & адреса различаются, что я ожидаю, поскольку числа 1 и fPtr сохраняются в разных адресах.
Кроме того, я убираю & из инструкции 'printf ("% p \ n", & number1);' возвращаемое значение равно нулю. Может ли кто-нибудь объяснить, почему?
И последние 4 байта двойного представления 1.0 содержат все нули, поэтому, если это значение повторно интерпретируется как указатель, оно может печатать нуль. Однако это зависит от многих факторов (т. Е. Неопределенного поведения). – axalis