储存时期:
一个c变量的储存时期为:
1:静态储存时期
(该变量可在程序执行期间一直存在);
例如:全局变量(具有文件作用域)
对于static这个关键词来讲:
他表明链接的类型,而非储存时期
(对于文件作用域变量,无论他具有内部链接
还是外部链接,都具有静态储存时期。对于用static
声明的文件作用域变量只有内部链接)
2:自动储存时期
(该变量只在 他所在的代码块起作用);
例如:自动变量(具有代码块作用域)
void func(int a);
int giants=0;
int main(int argc,char const* argv[])
{int giant=5;
giant=func(giant);
printf("giant=%d\n",giant);
giant=func(giant);
printf("giant=%d",giant);
return 0;
}
int func(int a){
static int a=2;
a++;
return a;
}
输出:giant=3
giant=4;
因为static所声明得变量只定义一次(文件作用域)
不会重复声明
(所以对函数参量不能使用static声明)// c语言也不允许
那么问题来了?
1static只定义一次,为什么?
2计算机又是如何实现的呢?
解:
1:static如上文所提,拥有文件作用域,而拥有文件
作用域的变量定义时(就如同你定义一个全局变量)时的心理。
你懂得。。。只要一次足矣,等你爱我(有点跑题,请原谅)
2:计算机在内存中此变量的地址后面加上一点标志就可以了。
例如:
......................
int number=5;
int i;
int* p;
for (i=8; i > 0; i--)
{
static int n=number;
p=&n;//把n的地址赋给p
p++;//使p指向p的后面(4个字节后)的地址
*p=0;//把那里的值改为0
//对于不同的位数计算机你可以
//使用地址逐一访问,来寻找那个标志
//come have a try
n++;
printf("%d",n);
}
.......................
输出:66666666
其实C语言的很多东西都是用0,1来识别的
如最简单的if中判断,bool常量中的FLASE与TRUE。。
(还望各路人杰多多补充说明!)