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

为何使用%d格式符打印字符串会输出数值4195828?C语言代码输出解析

用%d打印字符串时输出的数值到底是什么?

先把你贴的代码放出来方便大家看:

#include <stdio.h>
int main() {
    printf("%d\n","Zara Ali"); // integer
    printf("%s","Zara Ali"); // string
    return 0;
}

你看到的4195828,其实就是字符串"Zara Ali"在你当前程序运行时的内存首地址的十进制表示。

为啥会出现这种情况?给你掰扯清楚:

  • 在C里,字符串字面量(比如"Zara Ali")本质是个char数组,而数组名在绝大多数场景下会自动转成指向数组第一个元素的指针(也就是char*类型)。
  • printf的%d格式符是用来输出十进制整数的,但你这里传进去的是个指针。printf不管你传的类型对不对,它会直接把这个指针存储的内存地址值,当作整数来解析输出——于是就出现了那个看起来莫名其妙的数字。
  • 注意哦,这个数字不是固定的!每次运行程序,或者换个操作系统/编译器,这个数值都可能变,因为字符串字面量加载到内存的位置不一定相同。

另外要提一句:这种写法属于C标准里的未定义行为,因为格式符和参数类型不匹配。虽然大多数情况下会输出地址数值,但标准没保证一定这么干,极端情况下甚至可能导致程序崩溃。要是你真的想打印字符串的地址,应该用%p格式符,比如:

printf("%p\n", "Zara Ali");

这样会输出标准格式的指针地址(一般是十六进制)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:17:37