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

C语言中给结构体赋值时使用const关键字的作用是什么?

问题分析

你代码中const修饰的是匿名复合字面量(const struct x) {0},而非变量xx本身,这是你删除const后运行结果无差异的核心原因:

xx = (const struct x) {0};
// 这行的执行逻辑是:
// 1. 生成一个const修饰的匿名结构体临时变量,所有成员初始化为0
// 2. 将这个临时变量的值完整拷贝给非const变量xx
// 3. 临时变量销毁,后续对xx的修改完全不受该临时变量const属性约束

此处const的实际意义

  • 编译期检查:防止对复合字面量本身的误修改,比如你写(const struct x){0}.a = 10;时,编译器会直接报错,避免后续出现未定义行为;如果没有const修饰,这种修改是合法的。
  • 编译优化:带const的复合字面量会被编译器认定为只读常量,可直接放到只读数据段存储,不需要在栈上反复分配临时空间,在多次使用该常量的场景下可小幅优化内存占用和执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:05