我被要求编写一个返回数组中数字平均值的函数。它很直接:
int array_sum(int seq[], int len) {
int sum = 0;
for (int i = 0; i < len; ++i) {
sum += seq[i];}
return sum;}
float array_avg(int seq[], int len) {
int sum = number_sum(seq,len);
return sum/len;}
但现在我必须重写它,以便seq是一个指针:
int array_sum(int *seq, int len) { <--- This function is working properly
int sum =0;
for(int *p = seq; p < len+seq; ++p)
{sum += *p;}
return sum;}
float seq_avg(int *seq, int len) {
int sum = number_sum(*seq,len); <---- THIS LINE CAUSES AN ERROR
return sum/len;}
我试过了
-number_sum(* SEQ,LEN);
-number_sum(安培; SEQ,LEN);
但它们似乎都没有用。如何使它工作?
答案 0 :(得分:3)
您应该只传递指针,而不是取消引用它:*seq
是int
而seq
是int*
。
float seq_avg(int *seq, int len) {
int sum = number_sum(seq, len);
return sum/len;}
此外,您的方法名为array_sum
,而不是number_sum
,您获得的确切错误是什么?可以使用与第一种方法相同的方式调用它,也可以使用seq[i]
以相同的方式完成索引。
复制粘贴并检查它是否有效:
int array_sum(int* seq, int len)
{
int sum = 0;
for (int i = 0; i < len; i++) {
sum += seq[i];
}
return sum;
}
float array_avg(int* seq, int len)
{
int sum = array_sum(seq, len);
return sum / len;
}
答案 1 :(得分:2)
此
int array_sum(int seq[], int len)
和这个
int array_sum(int * seq, int len)
是等价的。
在这两种情况下,seq
都是指向int
的指针。
从这个结论来看,使用了函数的两个实现,将用相同的方式调用。
int array_sum(int * seq, size_t len)
{
int sum = 0;
for (size_t i = 0; i < len; ++i)
{
sum += seq[i];
}
return sum;
}
float array_avg(int * seq, size_t len)
{
int sum = array_sum(seq, len);
return (float) sum / len; /* By casting sum to float you make
sure not an integer division is performed. */
}
这样称呼:
int main(void)
{
int a[] = {0, 3, 2, 4, 1};
float avg = array_avg(a, sizeof a / sizeof a[0]);
return 0;
}