%p 和 cout &ptr 之间的 C++ 区别

标签 c++ pointers printf 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

地址 fPtr: 0xbfb7e34c

0xbfb7e348

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

此外,我从语句 'printf("%p\n", &number1); 中去掉了 &返回值为零。谁能解释一下为什么?

最佳答案

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

cout << "Address fPtr: " << &fPtr << endl;

在这里,您正在打印 fPtr:

printf("%p", fPtr);

它们不是一回事。

如果你想用printf打印fPtr的地址,那么你需要

printf("%p", &fPtr);

如果你想用std::cout打印fPtr的值,那么你需要

cout << fPtr << endl;

关于%p 和 cout &ptr 之间的 C++ 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644321/

相关文章:

c++ - 正则表达式替换:到 ":"等

c++ - 为什么在可怕的菱形情况下需要父类(super class)空构造函数但不调用?

c++ 对日期进行二分搜索排序 -> 我需要一个范围(cca)

c++ - 指针容器问题

c++ - 如何传递 std::string 作为构造函数参数并将其保存的 C 字符串存储在 void 指针中?

c - Printf 未在 Apple Clang 中打印到终端

c++ - C++ 的 Makefile,包含一个 .o 文件和一个 .CPP 文件

loops - 为什么可以通过赋值来更改 slice ,而不能通过for循环来更改?

bash - 使用 printf 格式化输出 : truncating or padding

c++ - C++ 的 String.Format