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
相关产品推荐
相关产品推荐

