1 const
//const 修饰局部变量,可以借助地址达到改变的目的
const int num = 10;
int *p = (const*)#
*p = 20;
printf("num = %d\n",num);//num = 20
//const修饰全局变量 num不在栈上,而是在静态区上
//相当于又加了一层保护作用,不允许被修改,程序崩溃
const int num = 10;
int main()
{
int *p = (const*)#
*p = 20;
printf("num = %d\n", num);
system("pause");
return 0;
}
//const修饰指针变量
//一级指针
int num = 10;
int const *p1 = #//*p1不能被修改,p1可以改
int *const p2 = #//*p2可以改,p2不能改
//二级指针
int const **ppa = &p1;
//只是不能通过**ppa修改,但可以通过*p1修改num,或直接修改num
int * const *ppb = &p1;
int ** const ppc = &p1;
2 static
1 修饰局部变量,变量存放到静态区上,改变声明周期
2 修饰全局变量,改变链接属性,外部连接属性-->内部链接属性
3 修饰函数,改变链接属性,只能在该文件内使用
3 volatile
int main()
{
volatile const int num = 10;
//保证内存的可见性
//防止编译器优化
int *p = (int *)#
*p = 20;
system("pause");
return 0;
}