为什么静态变量a
的值即使在return语句之后也没有增加?
#include<stdio.h>
int p(int x);
int main()
{
int r=p(4);
printf("%d",r);
return 0;
}
int p(int x)
{
static a=1;
printf(" x = %d,a= %d\n",x,a);
if(x<=1)
{
return 1;
}
else
{
printf(" x = %d,a= %d\n",x,a);
return p(x-1)+x+a++;
printf(" x = %d,a= %d\n",x,a);
}
}
在这里,当我打印静态变量a
时,它的值始终为1。但根据我读到的理论,它应该在每次递归调用后递增。
最佳答案
表达式p(x-1) + x + a++
的求值顺序未指定。我们知道所有三个操作数在求和之前都会被求值,但我们不知道它们的求值顺序(这取决于编译器)。在您的情况下,编译器首先计算 p(x-1)
,因此递归函数调用中 a
的值始终为 1,并且仅在程序从所有递归调用。
关于c - 在此代码中,静态变量不会使用递归递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731983/