使用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
相关产品推荐
相关产品推荐

