全局函数中的static变量问题

现有:
//teststatic.cpp

void TestStatic(int nCopy)
{
   static int a = nCopy;
   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
}

结果:
1
1
press any key to continue

 问题是:为什么这样的结果??

 回复内容
【taodm】:
static变量就这样的啊,只初始化一次。

【lj860603】:
static还有全局变量只能定义一次,初始化一次

【Chiyer】:
那你要什么样子

static 只在调用第一次的时候初始化

所以

   TestStatic(1);     // 这个函数初始化a 为1
   TestStatic(2);    // 这次调用就不用初始化了

你调换一下顺序就知道了

 TestStatic(2);   
   TestStatic(1);

结果应该是 
2
2    



【todototry】:
static变量初始化了之后,再次进入函数的时候,保持原的值的

【guangmingshizhe】:
static变量只定一一次,但是可以重新赋值


static int test = 10;

void TestStatic(int nCopy)
{
test = nCopy;
cout << test << endl;
}


TestStatic(20);
TestStatic(30);

结果就是20  30

【eduyu】:
void TestStatic(int nCopy)
{
   static int a = nCopy;  //这句话是初始化,不是赋值,由于static变量只能被赋值一次
                          //第二次进入这个函数,这句话可以认为“不会被执行”。

   //加这句,这句话是赋值,每次进入这个函数都会被执行。
   a=nCopy;

   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
}

【eduyu】:
抱歉,打快了,不是被“赋值一次”是 “被初始化一次”。

ok,你再看看结果。

【yuyunliuhen】:
static只能初始化一次

【erac】:
static初始化一次,如果不对其进行修改还是原来的值。

【clxye】:
恩,这个问题问的好。学习了。

【jsjszg】:
对的.虽然调试的时候每次都经过初始化那一行,但并没有初始化.(除了第一次)

【Aaron_Jerry】:
TestStatic(1);
TestStatic(2);
输出的是同一个内存地址里的值

具体见:
http://dev.csdn.net/author/haoel/f10d3532658744ab87e4d4a000091b81.html

【Vitin】:
简单地说,应该这样写:
void TestStatic(int nCopy)
{
   static int a;
   a = nCopy;
   cout << a << endl;
}


【qwerasd1234】:
void TestStatic(int nCopy)
{
   static int &a = nCopy;
   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
   return 0;
}
posted @ 2012-04-10 14:28  carbs  阅读(473)  评论(0编辑  收藏  举报