You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:55