数组简介

时间:2012-03-19 14:06:02

标签: c arrays

  

可能重复:
  when do we need to pass the size of array as a parameter

所以我刚开始使用数组,我需要创建3个函数来让我学习。

int sumarray(int a[], int n);

// a is an array of n elements
// sumarray must return the sum of the elements
// you may assume the result is in the range
//    [-2^-31, 2^31-1]

int maxarraypos(int a[], int n);

// a is an array of n elements
// maxarraypos must return the position of
//   the first occurrence of the maximum
//   value in a
// if there is no such value, must return 0

bool lexlt(int a[], int n, int b[], int m);

// lexicographic "less than" between an array
//   a of length n and an array b of length m
// returns true if a comes before b in
//   lexicographic order; false otherwise

我究竟如何创建这些功能?

对于sumarray,我很困惑,因为数组存储了一定长度的东西。为什么需要第二个参数n

还有我如何测试使用数组的函数?我在想sumarray([3], 3) ..是吗?

3 个答案:

答案 0 :(得分:10)

当传递给函数时,数组衰减成指针,该指针本身不存储长度。第二个参数将存储数组中元素的数量,因此,它看起来像这样:

int values[] = { 16, 13, 78, 14, 91 };
int count = sizeof(values) / sizeof(*values);

printf("sum of values: %i\n", sumarray(values, count));
printf("maximum position: %i\n", maxarraypos(values, count));

答案 1 :(得分:2)

  

对于sumarray,我很困惑,因为数组存储了一定长度的内容,为什么需要第二个参数n

您需要第二个参数来告诉您数组的长度。作为C中方法的参数的数组没有附加到它们的长度。因此,如果您有一个将数组作为参数的方法,除非您也将其传递给方法,否则它无法知道长度。这就是n的用途。

  

还有我如何测试消耗数组的函数,我想是sumarray([3], 3) ..是吗?

没有。你可以说

int myArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

然后

int sum = sumarray(myArray, 10);

要解决所有这些问题,你需要循环(最好是for循环,我确信你的讲师提供了如何循环遍历数组元素的例子)。除此之外,我不做你的功课。提出具体的,尖锐的问题,我很乐意考虑回答它们。

答案 2 :(得分:1)

  由于数组存储了一定长度的东西,我很困惑,   为什么需要第二个参数n?

因为你不知道一定的长度。如果您不想在更改初始数组的长度时更改代码,则需要传递n,因为c语言通常不提供该信息。