在下面的代码中,使该函数起作用的唯一方法是当我声明sum = 0时。我的问题是:如果每次都调用sum()时调用该函数,为什么sum不能获得值= 0,因为它是写在函数的开头?
我期望输出为55、45、50,因为总和每次运行都会得到值0!但是由于某种原因,第二次调用该函数后,第一行“ static 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
每次运行都获得值0
!
不,不是。
但是由于某些原因,第二次调用该函数后,第一行
static int sum = 0;
被跳过。为什么?
不会被跳过。那只是您的印象。
为什么每次调用该函数都不
sum = 0
?
因为sum
用static
存储类说明符限定,这意味着在函数执行一次之后sum
变量不会被破坏,并保留其值。
一个其标识符声明为不具有存储类specifier_Thread_local且具有外部或内部链接或具有存储类说明符静态的对象的静态存储持续时间。它的生命周期是程序的整个执行过程,并且在程序启动之前,其存储值仅初始化一次。
来源:C18,6.2.4 / 3
在static
变量处省略sum
,您将获得所需的结果。