可能重复:
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)
..是吗?
答案 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语言通常不提供该信息。