现有:
//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; } |