有人可以解释为什么以下代码中的总数 = 7 吗?使用静态整数和

Can someone explain why is the total = 7 in the following code? with static int sum?

本文关键字:整数 静态 解释 为什么 代码      更新时间:2023-10-16

有人可以解释为什么以下代码中的 total = 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 = %dn", 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 = %dn", 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.由于 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 Now,这将在下一次函数调用中使用。现在 j 变为 2,函数返回 1。所以它被添加到我们的总数中.现在总数变为 1。

第三次调用疯狂函数,i=2;

这里 x=2,j=2,sum=1(从以前的调用静态值保持不变(现在你足够聪明,可以计算这个结果

for (i = 0; i<2; i++, j++) { sum += j; }

这里的 sum 变为 6 并返回此值 。 因为我们之前的 total 值是 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 = %dnn", total);
    }
    return 0;
}  
int madness(int x) 
{
     static int i;
     static int sum = 0;
     for (i = 0; i<x; i++, j++) 
     { 
         printf("j is %dn", j);
         sum += j; 
         printf("Sum is %dn", sum);
     }
     return sum;
}

另外,打开@Yashas建议的链接以了解静态的含义。基本上,函数内的局部变量在函数返回后被销毁;但是静态变量不会被销毁,每次调用该函数时,总和的值将与上次相同。