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

使用double类型无法打印正确变量地址,输出全为零该如何解决?

指针地址打印全为0的问题分析与解决

错误核心原因

  • 格式说明符不匹配:%lf 是专门用于输出double类型浮点数的格式符,而你要打印的是指针(内存地址),需要使用地址专属格式符 %p。
  • 标准规范要求:使用 %p 时,对应的参数必须强制转换为 void* 类型,否则会触发未定义行为,你看到的全0输出就是这种错误的具体表现。

修正后的代码

#include <stdio.h>

int main() {  // 标准C中main返回类型应为int,void main属于非标准写法
    double a[5] = { 6.0, 7.0, 8.0, 9.0, 10.0 };
    double *p;
    p = a;
    printf("%p \n", (void*)p);
    for (int i = 0; i < 5; i++) {
         printf("%p \n", (void*)p++);
    }
    return 0;
}

补充说明

  • 关于main函数:void main并非标准C的写法,不同编译器对其支持程度不同,遵循标准使用int main并返回0是更可靠的写法。
  • 地址打印规则:%p会以系统默认格式(通常是十六进制)输出内存地址,这是打印指针的标准方式,使用错误格式符会导致不可预测的结果。

内容的提问来源于stack exchange,提问作者Sharanya Thambi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:28