为何使用cout与printf打印同一变量地址输出不同?
为什么用cout和printf打印同一变量地址结果不同?
先看你给出的测试代码:
#include <bits/stdc++.h> using namespace std ; int main(){ int a = 5 ; cout << &a << endl ; printf("%u\n",&a); }
这俩输出不一样,核心原因是两者对地址的输出格式规则不同:
- cout在打印非字符类型的指针时,默认会以十六进制格式输出地址,通常还会带
0x前缀。 - 你用printf的
%u格式符,是把指针的值当成无符号十进制整数来输出,相当于把十六进制的地址转成了十进制数。
举个实际例子:如果变量a的地址是十六进制的0x7ffeefbff5ac,转成十进制就是140732981463468——这就是你看到的两个不同输出,但本质是同一个地址的不同进制表示。
如果想让两者输出一致,有两种方法:
- 让cout输出十进制地址:把代码改成
cout << dec << (unsigned long long)&a << endl;,强制用十进制输出地址数值。 - 让printf输出十六进制地址:用专门的指针格式符
%p,代码改成printf("%p\n", &a);,这样输出格式就和cout默认的十六进制地址一致了。
内容的提问来源于stack exchange,提问作者Ritik Singh
相关产品推荐
相关产品推荐

