C++ 这个程序有点不太懂

这个答案为什么是60
单步执行
s 分别是 15 45 60

int fun(int x[ ],int n)
{ 
static int sum=0,i;
for(i=0;ireturn sum;
}
#include
void main( )
{
  int a[ ]={1,2,3,4,5},b[ ]={6,7,8,9},s=0;
  s=fun(a,5)+fun(b,4); 
  printf("%d\n",s);
}


函数的功能是数组元素累加到sum
12345加起来不是15吗
6789加起来是30
sum本身是静态变量,所以30会被累加到前面的15上,就是45
然后两次函数的返回值再相加,15+45=60
-=-=-==
这里题目考点就是静态变量
静态变量全局只有一个,只初始化一次,它地址是唯一的

  • 定义了一个静态变量sum和一个变量i,它们的初值分别为0和未定义。

  • 在fun函数中,使用for循环来遍历数组x,并将每个元素的值加到sum变量上。

  • fun函数返回sum的值。

  • 在main函数中,定义了两个数组a和b,分别为{1,2,3,4,5}和{6,7,8,9}。

  • 调用fun函数两次,分别传入数组a和b,并将它们的返回值相加赋值给变量s。

  • 输出变量s的值,即60。

这是因为fun函数里面的sum被申明为静态变量的缘故,fun被调用的时候,sum仍然保留了上一次的值,因此最终的输出结果是60

关键点在静态变量:会在方法全局里一直存在值,只会初始化一次赋值,所以第二次跑到定义静态变量sum时,系统判断已经有值,不再初始化0,继续保存着上一步骤的15


#include <stdio.h>
#include <stdlib.h>
#include<iostream>

/*
这个答案为什么是60
单步执行
s 分别是 15 45 60
*/

int fun(int x[], int n)
{
    static int sum = 0, i;

    for (i = 0; i < n; i++) 
        sum += x[i];

    return sum;
}

void main()
{
    int a[] = { 1,2,3,4,5 },
        b[] = { 6,7,8,9 },
        s = 0;

    // 15+45=60
    // 由于sum定义为静态类,所以在main方法区域里,静态类特点就是只会初始化一次赋值,多个地方使用
    s = fun(a, 5) // 15=1+2+3+4+5+6
        + 
        fun(b, 4);     // 30=6+7+8+9 + 15=45
    

    printf("%d\n", s);

    system("Pause");
}