有人可以解释为什么以下代码中的总数= 7?用静态int sum?
#include <stdio.h>
int i, j;
int madness(int x);
int main(void)
{
int i, total = 0;
j = 1;
for (i = 0; i<3; i++) { total += madness(i); }
printf("Total = %d\n", total);
return 0;
}
int madness(int x)
{
static int i;
static int sum = 0;
for (i = 0; i<x; i++, j++) { sum += j; }
return sum;
}
#include <stdio.h>
int i, j;
int madness(int x);
int main(void)
{
int i, total = 0;
j = 1;
for (i = 0; i<3; i++) { total += madness(i); }
printf("Total = %d\n", total);
return 0;
}
int madness(int x)
{
static int i;
static int sum = 0;
for (i = 0; i<x; i++, j++) { sum += j; }
return sum;
}
第一次调用疯狂函数,i = 0;
因为静态变量只初始化一次,所以在第一次调用疯狂函数时,它在此函数中指定i = 0和sum = 0.since x = 0,因此sum的值保持不变,并返回0。
第二次调用疯狂函数,i = 1;
这里我们有x = 1,j = 1,sum = 0和函数运行循环
for (i = 0; i<1; i++, j++) { sum += j; }
因此我们得到sum = 1并且j的值得到2现在将在下一个函数调用中使用。现在j变为2并且函数返回1.因此它被添加到我们的总数中。现在总数变为1。
第三次调用疯狂函数,i = 2;
这里x = 2,j = 2,sum = 1(从之前的调用静态值保持不变)现在你足够聪明来计算这个结果
for (i = 0; i<2; i++, j++) { sum += j; }
sum总和变为6并返回此值。因为我们以前的总值是1。现在它变成6 + 1 = 7这是你所需要的答案。
我在代码中添加了一些调试语句,以帮助更好地理解它。
#include <stdio.h>
int i, j;
int madness(int x);
int main(void)
{
int i, total = 0;
j = 1;
for (i = 0; i<3; i++)
{
total += madness(i);
printf("Total = %d\n\n", total);
}
return 0;
}
int madness(int x)
{
static int i;
static int sum = 0;
for (i = 0; i<x; i++, j++)
{
printf("j is %d\n", j);
sum += j;
printf("Sum is %d\n", sum);
}
return sum;
}
另外,打开@Yashas建议的链接,了解静态意味着什么。基本上,函数内部的局部变量在函数返回后被销毁;但是静态变量不会被破坏,每次调用函数时,总和将具有与上次相同的值。