如何打印作为参数传递的 int 数组的总和

How to print the sum of a passing a int array as a parameter

#include <stdio.h>
int sumofArrayNum(int numList[]);

int main(){
int result,numList[]={23,32,54,23,54,32,3,35};

result = sumofArrayNum(numList);
printf("sum= %d", result);
return 0;
}

int sumofArrayNum(int numList[]){
 int sum = 0;

  for(int i = 0; i < 10; ++i){
   sum += numList[i];
  }
  return sum;
}

我每次构建和 运行 时输出都不同。 例如。输出是 sum = 1032918821

我想要的预期输出是 sum = 256

numlist中有8个元素表示for循环必须执行代码8次。 您的代码必须是:

for(int i = 0; i < 8; ++i)
{
   sum += numList[i];
}

此代码迭代直到 i=7,当 i=8 时它将结束循环。

关于for loop

的信息

int numList[] 等参数与 int* numList 相同,如果未 显式 定义,编译器将不知道它的元素计数。顺便说一句,int numList[8] 也与 int* numList 相同。 C语言检查数组范围

有一些方法可以获取和检查数组大小。

  • size/count参数
int sumofArrayNum(int numList[], int listSize){
 int sum = 0;
  for(int i = 0; i < listSize; ++i){
   sum += numList[i];
  }
  return sum;
}

这里listSize应该是count个元素。

并且您可以使用宏来隐藏计数参数:

#define sumofArray(array) sumofArrayNum((array), sizeof(array)/sizeof(*array))
  • 指向整个数组
int sumofArrayNum(int (*numList)[8]){
 int sum = 0;
  for(int i = 0; i < sizeof(*numList)/sizeof(**numList); ++i){
   sum += (*numList)[i];
  }
  return sum;
}

发送数组指针调用:

result = sumofArrayNum(&numList);

编译器(例如 gcc)可以对此进行弱检查:如果您发送的数组不是 int (*)[8].

,则发出警告

注意一定要保证数组的合法性,数组的大小必须是常量


此外,

Output is different each time I build and run it.

因为只定义了8个元素,索引范围是0〜7numList[8]numList[9] 是未定义的,意味着任何值都是可能的。可能被使用,被其他进程更改,随机且危险。