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

为什么C语言中直接赋值整数的指针无法用printf输出对应值?

问题核心原因

你遇到的问题本质是指针变量的赋值逻辑错误,指针变量本身存储的是「内存地址」,只有给它赋值合法的、你拥有访问权限的内存地址,后续解引用操作才是合法的。

第一段代码逻辑合法的原因

int main()
{
    int x = 7;
    int *aptr = &x; // 这里用&x取变量x对应的内存地址,赋值给指针aptr
    printf("%d",*aptr); // 解引用aptr,等价于访问x变量的值
    *aptr = 21; // 解引用aptr后赋值,等价于修改x变量的值
    printf("%d",*aptr);
}
  • 这里aptr存储的是局部变量x的合法栈内存地址,你对这块内存有读写权限,所以读写操作都能正常执行。

第二段代码崩溃无输出的原因

int main()
{
    int x = 7;
    int *aptr = 21; // 错误操作:直接把整数21当成内存地址赋值给指针
    printf("%d",*aptr); // 尝试访问地址为21的内存,触发非法访问错误
}
  • 数值21对应的内存地址(0x00000015)属于操作系统保护的低地址空间,普通用户程序没有权限访问这块内存。
  • 当你执行*aptr解引用操作时,操作系统会直接触发段错误(Segmentation Fault)终止程序运行,所以不会有任何输出内容。
  • 额外提示:这段代码编译时编译器会抛出「整数转换为指针无类型强制转换」的警告,开发时注意不要忽略这类编译告警。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:02