[英]In this function (in C) that takes an integer as an argument: Why isn't sum = 0 every time the function is called?
更新:嗨,我没有误解 function 的目标。 我很惊讶 static int sum = 0 每次调用 function 时都不会执行,所以我不明白。 function 的目标是正确的:将值相加并给出最终值,它工作正常。 问题是:为什么每次调用 function 时总和不会变为 0? 我想这就是按照惯例设置的方式? 那既然我把 static int sum ,它只会运行一次并使其等于零,但是当调用 function 时它不会再次运行这行代码? 在下面的代码中,我可以使这个 function 工作的唯一方法是当我声明 sum = 0 时。
我期待 output 为 55、45、50,因为 sum 每次运行时都会得到值 0,但由于某种原因,在第二次调用 function 之后; 第一行“静态 int sum = 0”。 被跳过? 为什么? 非常感谢 =)
#include <stdio.h>
int sum (int num)
{
static int sum = 0;
sum = sum + num;
return sum;
}
int main()
{
printf("%d ",sum(55));
printf("%d ",sum(45));
printf("%d ",sum(50));
return 0;
}
由于
sum
(变量)每次运行(sum
函数)时都会得到值0
!
不,这不对。
但是由于某种原因,在第二次调用 function 之后,第一行
static int sum = 0;
被跳过。 为什么?
它没有被跳过。 那只是你的印象。 但是0
的初始化只在程序启动之前发生一次。
如果每次调用
sum()
时都会调用 function ,为什么sum
(变量)不会得到0
的值,因为它写在 function 的开头?
因为sum
是用static
存储 class 说明符限定的,这意味着sum
变量在 function 执行一次后不会被破坏,并且在整个程序执行过程中保留其值。
一个 object,其标识符声明时没有存储类说明符_Thread_local,并且具有外部或内部链接或存储类说明符 static,具有 static 存储持续时间。 它的生命周期是程序的整个执行过程,它的存储值只在程序启动之前初始化一次。
来源:ISO/IEC 9899:2018 (C18), §6.2.4/3
在sum
变量中省略static
获得所需的结果。
请注意, sum
function 的目的在这种情况下是毫无用处的。 我想这只是为了测试目的。
对我来说,您似乎实际上从其他地方得到了 function 并误解了程序的目的和 function sum
。
function sum
的最初目的是对不同 function 调用sum()
提供的输入值求和,并在每次 function 调用时返回当前总和。
这就是为什么sum
(变量)符合static
(保留其值)的原因。
目的不仅仅是传递输入值,这就是sum()
的目的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.