繁体   English   中英

在此 function (在 C 中)中,它以 integer 作为参数:为什么每次调用 function 时总和不等于 0?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM