omg无限风行大:c语言 static静态变量

来源:百度文库 编辑:高考问答 时间:2024/04/30 03:04:51
#include "iostream.h"
int p(int x)
{
static int y=1;
y=y+1;
return (x+y);}
int main()
{
cout<<p(1)<<endl;
cout<<p(2)<<endl;}

答案是3和5,为什么不是3和4呢?
那再一次调用的时候难道 static int y=1; 这句就没有意义不运行了?

c语言的static变量是在程序加载的时候就为之分配内存的,一直到程序结束,而不像普通变量那样函数执行一次分配一次。所以当第一次执行p(1)的时候,y已经加1了,下次执行p(2)时,y不会恢复成1,还是2;你就当全局变量的功能处理就行,性能上有区别

静态变量是这样的:静态变量的内存是整个程序开始就分配了内存,整个程序结束后内存才消失!动态变量的就是用的时候才动态分配,用完之后就消失了!静态变量给了变量初始的值,然后如果在程序中该值有变化的,那当前的值就是变化后的值,这个是它的原理
你的初始值是1,第一次结果有变化,是2,所以静态变量当前值是2,所以输出的是3,下次用2,所以结果是5

static是静态类型关键字,她具有全局变量的功能,在运行的过程中只初始化一次,每一次值的变化都写入数据缓存中,用来下次被使用。

二.有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次函数调用时,该变量已有值,就是上一次函数调用结束时的值.这是就应该指定该局部变量为"局部静态变量",用static加以说明
引自 <<C程序设计>> 谭浩强

哈哈

这是因为静态变量在整个程序运行过程中只能被初始化1次;
接下来分析一下你的程序:
第一次调动函数P:
P(1),既X=1,Y=1;
Y=Y+1;既Y=2;
第二次调动时Y仍等于2,所以是3和5