C语言中的类型修饰符const

📅 2026/7/2 15:30:54 👁️ 阅读次数 📝 编程学习
C语言中的类型修饰符const
  • 使用const限定类型声明的对象,可能会被编译器放置在只读内存区域中;如果程序中从未获取过某个const对象的地址,它甚至可能根本不会被存储(直接被优化掉)。
  • 任何试图修改const限定类型对象的行为,都会导致未定义行为。

示例

#include<stdio.h>constinta=1;intmain(){int*p=(int*)&a;*p=2;printf("%d\n",a);return0;}

运行报错:

  • const的语义仅适用于左值表达式。
  • 指定const限定类型对象的左值表达式,以及指定包含至少一个const限定成员的struct / union 类型对象的左值表达式(包括递归包含的聚合体或联合体的成员),都是不可修改的左值。特别是,它们不允许被赋值。

示例,下面的代码试图给const修饰的变量赋值,编译报错:

示例:下面的struct中的成员bconst修饰,试图修改s1时编译报错:

  • 当结构体本身被const修饰时,它的所有成员都会变成 “只读”,无论成员本身是否声明为const

示例