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

时间:2013-11-14 00:34:45

标签: c++ pointers printf cout

#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

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

2 个答案:

答案 0 :(得分:3)

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

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

printf("%p\n", static_cast<void *>(p0));

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

答案 1 :(得分:1)

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