#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
只是想知道这是否重要,如果有的话,是否有任何方法可以解决它。
答案 0 :(得分:3)
因为您使用%x
作为格式说明符,这意味着0x
的十六进制格式(不包含unsigned int
)。它与您机器中不同格式的数字相同,但在64位机器中,对象指针通常有8个字节,您可能可能有不同的数字。
指针的正确格式说明符是%p
,它以实现定义的方式打印指针,通常以0x
为前缀,试试这个:
printf("%p\n", static_cast<void *>(p0));
请注意%p
需要一个void *
指针,因此需要进行强制转换。
答案 1 :(得分:1)
同样,0x只是一个前缀,用于表示它是十六进制数。