我想按值(而不是按引用)将 vector 传递给函数。执行代码 arr[1]、arr[2] 和 arr[3] 等于 0。函数 getAvarage
必须使用哪些参数才能不修改 vector arr
。
#include <stdio.h>
#include <stdlib.h>
double getAverage(int v[]);
int main()
{
int arr[4], i;
for (i = 0 ; i < 4 ; i++){
printf("arr[%d]=", i);
scanf("%d", &arr[i]);
}
printf("avrg=%lf", getAverage(arr));
printf("\n%d %d %d", arr[1], arr[2], arr[3]);
return 0;
}
double getAverage(int v[])
{
int i;
double avg;
double sum = 0;
for (i = 0; i < 4; ++i) {
sum += v[i];
v[i] = 0;
}
avg = sum / 4;
return avg;
}
最佳答案
在 c 中,不能通过引用传递变量。它总是按值(value)。问题在于数组被转换为指向其第一个元素的指针,因此您可以通过函数内的指针修改原始对象。
如果您想确保该函数不会更改数组的内容,您可以使用 const
关键字。它不会严格阻止您修改对象,但有助于检测意外修改。
double getAverage(const int *v);
您可以使用另一个const
来避免重新分配指针值
double getAverage(const int *const v);
也就是说,无论如何都没有充分的理由将 0
分配给 getAverage()
函数内的值。所以可能是
double
get_average(const int *const v)
{
int i;
double sum = 0;
for (i = 0; i < 4; ++i) {
sum += v[i];
}
return sum / 4.0;
}
关于c - 如何在 C 中按值将 vector 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437776/