1 static关键字
首先他表示定义的变量是静态的,在静态存储区分配内存空间,c++里面主要有三种用法
(1)在函数外用static关键字
static int var = 0;
int var2 = 0;
int main()
{
var++;
var2++;
printf("%d %d",var,var2);
return 0;
}
此时,var的作用域是整个文件,这里顺便也说一下var2,它的作用域是整个项目,即这个项目中的其他文件也能访问var2,但是不能访问var,这是全局变量和静态变量的一个区别
(2)在函数内部使用static关键字
void test()
{
static int var;
printf("%d",var);
}
int main()
{
test();
return 0;
}
var 的作用域仅限于test()函数,但是他也被分配在静态存储区,在整个程序的运行过程中它都占有那块内存,只是只在test()里面有效。
2 volatile 关键字
它表明某个变量即使程序代码没有对内存单元进行修改,它的值也可能改变,消除编译器的优化。
比如,程序中连续用到某个变量的值,那么编译器就会把这个变量缓存,下次再用的时候就直接从缓存里读,而不去读内存,这样就可能导致读到的数据是已经被修改的,加上这个关键字,就会通知编译器不要进行这种优化。
3 const 关键字
在c++中全局变量加上const后,其作用域就会由整个项目编程整个文件,这一点与c稍有区别。
(1)const char * const mouths[12]={'jan','Feb',...........};
采用从右向左的方式来解释, 首先这是个 const数组,其次这个数组的每个元素是char * 的指针,最后,每个指针还是const型的,即第一个const说明每个指针防止字符串没修改,第二个const说明每个指针必须是最初指向的字符串。
(2) const int *pt: 从右向左,一个指针指向const int 型的变量,即指针指向的是一个常量,但是这个指针也可以指向其他的常量,即pt可以被修改
(3) int const *pt: 这是个const型的指针, 指向int型的变量,但是*pt可以被修改。