c - 如何在 C 中按值将 vector 传递给函数

标签 c

我想按值(而不是按引用)将 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/

相关文章:

c - 使用指针在 c 中打印当前工作目录

c - 使用函数 NOT WORKING 在 C 中交换程序

c - 如何使用 C 中的宏计算表达式的一部分?

c - 如何在C程序中将字符串中的第一个单词和最后一个单词大写?

c - 有什么简单的方法可以在 C 中为数组的每个元素添加前缀吗?

c++ - 如何有效地检查位掩码?

c - 浮点值显示不正确

c - 使用 scanf 处理多种数据类型

c++ - "\x"在字符串中如何工作?

c - program.exe 已停止工作...请发现错误?