在说static之前,先说一下变量的存储类别,从变量值存在的时间角度来分,可以分为静态存储方式和动态存储方式。
->静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。
->动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。
全局变量全是静态变量,在程序开始执行时给全局变量分配存储区,程序执行完毕就释放。在程序执行过程中,它们占据固定的存储单元,而不是动态的进行分配和释放。
那我们在实际使用过程中,有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,定义静态局部变量时就会用到关键字static。通过以下例子可了解它的特点。
#include <stdio.h>
void print(int num)
{
static int N=0;
N+=num;
printf("%d\n",N);
}
int main(int argc, char *argv[])
{
print(1);
print(2);
print(3);
print(4);
return 0;
}
从这可以看出,每次调用print函数的时候,定义的静态变量N都会在上次计算的基础上再相加,每次调用结束后,N的值不会被清空。
下面看一下将N定义为动态局部变量:
#include <stdio.h>
void print(int num)
{
int N=0;
N+=num;
printf(" %d\n\n",N);
}
int main(int argc, char *argv[])
{
print(1);
print(2);
print(3);
print(4);
return 0;
}
这里会发现每次调用print函数时,N都会是0。
看了上面的小例子,大家应该能明白变量带static关键字和不带static的缘由和区别了吧。
下面说一下常量 定义的关键字const;
int a;这是定义了一个整形的变量;
a=10;我们可以对这个变量进行赋值及运算;
假设我们在程序中想要定义一个值,该值不可以被修改,只能被读取。此时就需要用到常量的关键字const。
const int a=10;//定义了一个常量a;该值是不能被修改的,使用时只能作为右值。
int b=a;//这样的使用对的
int a=11;//这样是错误的
概念补充:
int a,b=1;
a=b;
“=”左边即为左值,右边即为右值,,,所以a为左值,b为右值。