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中的成员b被const修饰,试图修改s1时编译报错:
- 当结构体本身被
const修饰时,它的所有成员都会变成 “只读”,无论成员本身是否声明为const。
示例:
