0

我无法弄清楚为什么我的程序给了我这个错误。该函数假设对数组中的所有数字求和,然后求平均值。现在,我在总结元素时遇到了问题。

float Average(int **array, int n) {
  int sum = 0;
  int i;
  for (i = 0; i < n; i++){
    sum = sum + array[i];
  }
  return sum/n;
}

该参数array是在main方法中动态分配的,n是数组的大小。

错误来自这一行,但我不知道为什么。

sum = sum + array[i];
4

4 回答 4

5

你可能想要这个:

float Average(int *array, int n) {
  int sum = 0;
  int i;
  for (i = 0; i < n; i++){
    sum = sum + array[i];
  }
  return sum/n;
}

如果出于某种原因想要更改 *array 指向的位置,则只需要 **array。

于 2012-08-30T23:01:03.437 回答
3

发生这种情况的原因是数组是双指针。IE。尊重数组:

*array

给你这个:

int *array

这仍然是一个指针。

考虑您是否需要双指针,如果不需要,您将需要尊重它两次:

array[1][2]

希望这可以帮助。

于 2012-08-30T22:45:38.603 回答
2

您的数组实际上是一个数组数组(**),因此您正在计算数组中每个数组的起始虚拟内存地址的平均值。

编译器只是想告诉你,在大多数情况下,这不是程序员想要的结果。如果指针值大于 32 位整数,转换也可能失败。

演员表会告诉编译器我确定我在做什么

(int)array[i]

但我不认为那是你想要的,对吧?

于 2012-08-30T22:45:55.250 回答
1

本是正确的。如果您的数组是一个简单的列表,这是一个示例解决方案,

main(int argc, char * argv[])
{
int ia[10] = {3,2,3,4,5,6,7};
float ans = 0;

  ans = Average(ia,7);
  printf("Ans %f\n",ans);
  exit(0);
}

float Average(int *array, int n)
{
int sum = 0;
int i;

  for (i = 0; i < n; i++){
    sum = sum + array[i];
  }
  printf("Calc %d / %d\n",sum,n);
  return (float)sum/n;
}
于 2012-08-30T23:06:34.273 回答