const
在C中相当于一个只读变量,可以用指针改变值,但是不能直接更改。
const int a = 10;
int *p = (int*)&a;
*p = 20;
printf("%d",a);//结果是20
在C++中相当于一个常量,修饰内置数据类型时,指针修改无效,因为编译器直接替换,而没有去内存取值。
const int a = 1;
*p = (int *)a;
*p = 10;
std::cout<<a;//输出1
但是如果修饰的是非内置类型,因为编译器不知道如何去替换,因此必须访问内存去取数据,所以指针修改有效。
const int a[1]={1};
*p = (int *)a;
*p = 10;
std::cout<<a[0];//结果是10
static
- 修饰变量:不管是全局还是局部变量,他们都存在与静态区,所以这个变量的值,在函数下次使用时仍然存在。如果修饰的是全部变量,其他文件extern也不能使用这个变量。
- 修饰函数:函数前加static使得函数变成静态函数,但这里不是指存储方式,是指函数的作用域限于本文件,不用担心自己的函数与其他文件的函数同名。
- 函数内部声明的static变量,可作为对象中的一种同步机制。