为什么 printf() 在指针中显示与 cout 不同的地址输出C++
Why does printf() display a different address output than cout in C++ pointers?
#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 只是一个前缀,用于显示它是一个十六进制数。
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 在C++中打印指向不同基元数据类型的指针的内存地址
- std::cout.imbue()多重调用
- 如何在c++程序中找到函数的地址
- cout 打印内存地址而不是值
- 为什么取消引用的指针指向指针的 std::cout 会导致 -fsanitize=地址投诉?
- 为什么cout输出内存地址不是字符串?
- 为什么调用 cout.operator<<(const char*) 打印地址而不是字符串? 如何创建一个函数本地静态"HashSet<char>"并初始化它一次?
- cout矢量地址
- 使用cout,如何将char转换为变量的地址/引用(?)
- 变量的指针和cout地址
- 为什么 printf() 在指针中显示与 cout 不同的地址输出C++
- 使用 cout 打印对象指针值时地址长度不同
- 为什么将字符指针流式传输到 cout 不打印地址
- Std::getline()使用cout时返回内存地址
- 我们可以说cout只打印变量的第一个地址吗
- LPWSTR在cout中作为地址打印