几个关键字static &const & volatile

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;
}


猜你喜欢

转载自blog.csdn.net/weixin_39294633/article/details/79823246