|
程序代码如下:
#include <iostream>
using namespace std;
int aaa(int x)
{
static int y = x;
return y;
}
int bbb(int x)
{
static int y;
y = x;
return y;
}
int main()
{
int a = 1, b = 2, c = 3;
cout << aaa(a) << endl << aaa(b) << endl << aaa(c) << endl;
cout << bbb(a) << endl << bbb(b) << endl << bbb(c) << endl;
return 0;
}
输出结果是 :
3
3
3
1
2
3
个人理解
前3个输出3,是因为cout函数压栈是先把aaa(c)压入栈计算的结果,然后再aaa(b),然后再aaa(a)分别得到3个结果,也就是说 先计算的函数实际是aaa(c) 所以 静态变量y被初始化成了3, 再计算aaa(a)和aaa(b)的时候 static int y = x;这一行就相当于跳过了,Y的值一直是3,所有输出结果是 3个3
第二行输出 1 , 2 ,3 实际函数压栈顺序和上面一样, 先是计算bbb(c)的值,此时返回的是3, 第二次计算bbb(b)的值,此时只是 static int y 这一行跳过, 仍然执行 y=x,所以输出结果是2, 同理最有一个结果是1, 然后按顺序打印出来是 1 2 3
个人结论: static 修饰的变量只有在定义的同时初始化,才初始化这一次, 如果只声明不赋值, 在之后仍然可以对此变量正常赋值, 和普通变量没区别.
问题:不知道我上面分析的是否正确,请大佬们指正,谢谢;
|
上一篇: winhttp的send问题下一篇: VS2013的按钮
|