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

const int与指针操作问题:实际输出与预期不符的原因咨询

为什么修改const变量内存后输出未改变?

问题背景

学习时的书籍指出以下代码运行后会得到预期输出,但在repl.it上运行的实际输出与预期不符,需要解释原因。

实际输出

MAX=999
MAX=999

预期输出

MAX=999
MAX=666

测试代码

#include <stdio.h>
#pragma warning(disable : 4996)

int main(void) {
    const int MAX = 999;
    int *ptr;
    ptr=(int*)&MAX;
    *ptr=666;
    printf("MAX=%d\n",MAX);
    return 0;
}

原因解释

  • 编译器常量折叠优化:const int MAX = 999声明后,编译器会在编译阶段直接把所有直接引用MAX的地方替换成字面量999,而非运行时从内存地址读取值。你通过指针修改的是内存中的值,但printf里的MAX已经被提前替换成999,所以输出不会变化。
  • 未定义行为:从C语言标准来看,通过指针修改被const限定的对象属于未定义行为——编译器可自由处理这种情况,有的环境可能允许修改并输出新值,有的会像repl.it一样因常量折叠保持原值,极端情况下甚至可能导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:55:55