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

C语言中对数组元素取地址&后用%c输出为何得到随机值?

问题原因分析

出问题的代码如下:

char a[] = {'A'};
printf("This is random value %c", &a[0] );

输出随机值的核心原因是printf参数类型和格式控制符要求不匹配,触发了C语言的未定义行为,具体拆解:

  • printf的%c格式控制符要求对应位置传入的是字符类型的实际值,也就是ASCII码数值,但代码里传入的是&a[0],即数组首元素的内存地址,属于指针类型,参数类型完全不匹配。
  • 程序运行时会错误把传入的内存地址的低8位(char类型通常占1字节,对应8位)当做ASCII码解析为字符输出。而现代操作系统普遍开启ASLR(地址空间布局随机化),程序运行时的变量内存地址每次启动都会随机变化,所以解析出来的字符也会是随机值。

修正方案

如果要正确输出字符A,不需要对a[0]取地址,直接传入元素本身即可:

char a[] = {'A'};
printf("This is correct value %c", a[0] );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:18:01