static的关键字的主要作用如下:
(1)函数体内,static变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值。
(2)在模块内的static全局变量可以被模块内所有函数访问,但不能被模块外其他函数访问。
(3)在模块内的static函数只可被这一块模块的其他函数调用,这个函数的使用范围被限制在声明它的模块内。
static int i=0;void fun1(){ i=0; i++; printf("i=%d\n",i);}void fun2(){ static int j=0; j++; printf("j=%d\n",j);}int main(int argc, const char * argv[]) { // insert code here... for (int i=0; i<5; i++) { fun1(); // ---> i=1 i=1 i=1 i=1 i=1 fun2(); // ---> j=1 j=2 j=3 j=4 j=5 } return 0;}/* j被定义为局部静态变量,其值在每次函数结束时都被保留,所以结果都是上一次值加1*/
const关键字的作用如下:
(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了。
const int a=0; a=10; //改行显示报错/* * const修饰的是只读变量,只读变量的值在定义后就不能再改变了 */
(2)对指针来说,const可以指定指针本身-->指针常量(var * const p 指向不可变,所指内容可变)
//错误示范 int *const q=&a;// q=&b;
也可以指定指针所指的数据-->常量指针(var const *p 指向可变,所指内容不可变)
//错误示范 int const *p=&a;// *p=10;
也可以既指定指针本身又指定指针所指的数据(const var *const q 指向不可变,所指内容不可变)
//错误示范 const var *const p= &a;// *p=10;// p=&b;
注意:在定义const变量时,必须要对变量初始化,否则编译器会报错。