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

C语言中使用%p输出变量地址的疑问:无&符号时输出什么?

C语言%p格式符的两个常见疑问解答

嘿,让我来把这两个问题给你讲明白:

第一个问题:printf("%p", &a)确实输出变量a的地址吗?

没错!完全正确。&a是C语言的取地址运算符,它的作用就是获取变量a在内存中存储位置的地址值。而%p是标准C中专门用来输出指针(也就是内存地址)的格式说明符,它会把地址值以符合平台规范的十六进制形式输出(大部分编译器会带0x前缀,比如0x7ffeefbff5ac这种样子)。

第二个问题:printf("%p", a)会输出什么?

这就有点问题了——这属于格式符与参数类型不匹配的未定义行为!

%p要求对应的参数必须是一个指针类型(本质是一个地址值),但你这里传的是a,也就是整数6。编译器会把这个整数6强制转换成指针类型来处理,所以通常会输出十六进制的0x6(或者类似的格式,具体取决于你的操作系统和编译器)。但要特别注意:这种写法是不符合C标准的,未定义行为意味着不同平台、不同编译器可能会有完全不同的表现,甚至极端情况下可能导致程序异常。正经写代码的时候绝对不能这么干!

总结一下:

  • 用%p输出地址,必须传指针/地址值(比如&变量名或者指针变量)
  • 格式符和参数类型必须严格匹配,否则就是未定义行为,风险很大

内容的提问来源于stack exchange,提问作者승기유

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:19