1
#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

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

4

2 回答 2

3

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

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

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

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

于 2013-11-14T00:37:36.853 回答
1

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

于 2013-11-14T00:37:36.500 回答