有人可以解释为什么以下代码中的总数 = 7 吗?使用静态整数和
Can someone explain why is the total = 7 in the following code? with static int sum?
有人可以解释为什么以下代码中的 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建议的链接以了解静态的含义。基本上,函数内的局部变量在函数返回后被销毁;但是静态变量不会被销毁,每次调用该函数时,总和的值将与上次相同。
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- 静态强制转换允许转换对象指针,但不允许转换整数
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 整数和元组的静态 STL 映射返回 0
- 为什么我的静态整数没有在主函数中显示更改的值
- 有人可以解释为什么以下代码中的总数 = 7 吗?使用静态整数和
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 用于定义公共变量静态常量整数的C++标准
- 是否可以指定一个变量作为静态分配的整数数组的大小说明符
- 存储在静态常量整数 (C++) 中的对数函数的错误返回值
- MSVC 是否错误地处理了类范围的静态与整数常量初始值设定项的链接
- 比较非静态函数中的静态整数和非静态整数
- 对静态整数数组的未定义引用
- 为什么不通过获取内联定义的静态常量整数成员变量的地址来违反 ODR?
- 仅存储一个整数的指针的静态与动态分配