为什么 printf() 在指针中显示与 cout 不同的地址输出C++

Why does printf() display a different address output than cout in C++ pointers?

本文关键字:cout 地址 C++ 输出 显示 printf 指针 为什么      更新时间:2023-10-16
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
    int x = 25;
    int y = 35;
    int *p0 = &x; 
    int *p1 = &y;
    cout << p0 << endl; 
    printf("%x",p0); 
    cin.get();
    return 0;
}

printf()显示内存地址输出 22fd6c

cout显示内存地址输出 0x22fd6c

只是想知道这是否重要,如果是,是否有任何方法可以解决它。

因为您使用%x作为格式说明符,这意味着十六进制格式(不带0x)用于unsigned int。在您的机器中,它是具有不同格式的相同数字,但在对象指针通常具有 8 个字节的 64 位机器中,您可能有不同的数字。

指针的正确格式说明符是 %p ,它以实现定义的方式打印指针,通常以 0x 为前缀,试试这个:

printf("%pn", static_cast<void *>(p0));

请注意,%p需要void *指针,因此需要强制转换。

它是一样的,0x 只是一个前缀,用于显示它是一个十六进制数。