有人可以解释为啥以下代码中的总 = 7 吗?与静态整数总和? [关闭]
Posted
技术标签:
【中文标题】有人可以解释为啥以下代码中的总 = 7 吗?与静态整数总和? [关闭]【英文标题】:Can someone explain why is the total = 7 in the following code? with static int sum? [closed]有人可以解释为什么以下代码中的总 = 7 吗?与静态整数总和? [关闭] 【发布时间】:2017-12-28 12:31:41 【问题描述】:有人可以解释为什么以下代码中的总数 = 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", 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;
【问题讨论】:
What does "static" mean in C?的可能重复 你有没有用调试器单步调试代码,检查变量值? 真是浪费时间。你的老师应该感觉不好。 至少这可以教会人们如何不做事。 @klutt 输出为“Total = 7”。 【参考方案1】: #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 的 madness 函数;
因为静态变量只初始化一次,所以在第一次调用 madness 函数时它分配 i=0 和 sum=0.since x=0 在这个函数中所以 sum 的值保持不变并且它返回 0。
第二次调用 i=1 的 madness 函数;
这里我们有 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 的 madness 函数;
这里 x=2,j=2,sum=1(来自之前调用的静态值保持不变) 现在你已经足够聪明,可以计算出这个结果了
for (i = 0; i<2; i++, j++) sum += j;
这里 sum 变成 6 并返回这个值。因为我们之前的 total 值是 1 。现在它变成了 6+1=7 这是你需要的答案。
【讨论】:
谢谢。这是否意味着“总”在第三次调用中保留 1 的值,即使它没有分配静态 是的,'total' 不是一个静态变量。当你调用一个函数'madness'时,就像你保存了 main 函数的当前实例并控制了'madness'函数以及函数何时结束然后主函数再次获得控制权。明白了吗?【参考方案2】:我在您的代码中添加了一些调试语句以帮助您更好地理解它。
#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 建议的链接以了解静态的含义。基本上,函数内部的局部变量在函数返回后被销毁;但是静态变量不会被销毁,每次调用该函数时,总和将具有与上次相同的值。
【讨论】:
以上是关于有人可以解释为啥以下代码中的总 = 7 吗?与静态整数总和? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
预期时间复杂度为 O(n^2),但结果为 O(n)。有人可以解释为啥吗?
有人可以解释为啥条件运算符和赋值运算符一起使用时表现奇怪吗?