%p和cout&ptr之间的C++差异

cas*_*see 1 c++ printf pointers 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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

fPtr指向的对象的值:1

数字2的值:0

编号1的地址:0xbfb7e348

0xbfb7e348

地址fPtr:0xbfb7e34c

0xbfb7e348

为什么使用%p转换说明符打印的两个地址相同?当使用&时,地址是不同的,这是我期望的,因为number1和fPtr保存在不同的地址中.

另外,我从语句'printf("%p \n",&number1)中删除了&;' 返回值为零.谁有人解释为什么?

jua*_*nza 7

在这里,您打印的地址fPtr:

cout << "Address fPtr: " << &fPtr << endl;
Run Code Online (Sandbox Code Playgroud)

在这里,你打印的价值fPtr:

printf("%p", fPtr);
Run Code Online (Sandbox Code Playgroud)

那些不是一回事.

如果你要打印的地址fPtrprintf,那么你需要

printf("%p", &fPtr);
Run Code Online (Sandbox Code Playgroud)

如果要打印fPtrwith 的值std::cout,则需要

cout << fPtr << endl;
Run Code Online (Sandbox Code Playgroud)