int get()
{
static int n=0;
n++;
if(n<2) get();
return n;
}
和
int get(int n=0)
{
n++;
if(n<2) get(n);
return n;
}
本人想返回n最后的结果。为什么上面那个返回的是2,正确。下面那个返回的却是1?求指导
{
static int n=0;
n++;
if(n<2) get();
return n;
}
和
int get(int n=0)
{
n++;
if(n<2) get(n);
return n;
}
本人想返回n最后的结果。为什么上面那个返回的是2,正确。下面那个返回的却是1?求指导
解决方案
16
你可以在if后面加一句输出。跟踪一下n的值是怎么样变化的。
32
本人想 应该是函数执行时它的参数只是值的 拷贝,get(int n=0)那个函数里第一次的n 和第二次的n是两个n了,然后第二次的n为2返回给第一次2,但第一次的n还是1返回给外层1.
然后static 修饰的局部变量是导致这个变量就存在于程序运行的整个阶段了不会被第二次static 修饰赋值,并且维持它上一次改变的值,它不会被拷贝,也不像普通的局部变量会在用完后即空间被释放.
static修饰过后会被放在静态区(程序运行存在),普通的局部变量放在的是栈区(用完就释放空间).
可能你需要熟悉一下 哪些数据 存在于 哪些地方.例如堆和栈还有静态区等等.
然后static 修饰的局部变量是导致这个变量就存在于程序运行的整个阶段了不会被第二次static 修饰赋值,并且维持它上一次改变的值,它不会被拷贝,也不像普通的局部变量会在用完后即空间被释放.
static修饰过后会被放在静态区(程序运行存在),普通的局部变量放在的是栈区(用完就释放空间).
可能你需要熟悉一下 哪些数据 存在于 哪些地方.例如堆和栈还有静态区等等.