我编写了一个包含数组作为参数的函数, 并通过传递数组的值来调用它,如下所示.

void arraytest(int a[])
{
    // changed the array a
    a[0] = a[0] + a[1];
    a[1] = a[0] - a[1];
    a[0] = a[0] - a[1];
}

void main()
{
    int arr[] = {1, 2};
    printf("%d \t %d", arr[0], arr[1]);
    arraytest(arr);
    printf("\n After calling fun arr contains: %d\t %d", arr[0], arr[1]);
}

我发现,虽然我通过传递值调用arraytest()函数,但int arr[]的原始副本已更改.

你能解释一下为什么吗?

推荐答案

将数组作为参数传递时,此

void arraytest(int a[])

意思完全与

void arraytest(int *a)

所以你需要修改main中的值.

由于历史原因,数组不是一等公民,不能按值传递.

C++相关问答推荐

整值的最后一个字节如何影响C转换中的char强制转换?

由Go调用E.C.引起的内存快速增长

C/SDL程序,渲染不使用我的渲染器

为什么双重打印与C中的float具有不同的大小时具有相同的值?

为什么I2C会发送错误的数据?

ESP32在vTaskDelay上崩溃

我可以在C中声明不同长度数组的数组而不带变量名吗?

C语言编译阶段与翻译阶段的关系

C代码在字符串中删除不区分大小写的子字符串的问题

S和查尔有什么不同[1]?

C将数组传递给函数以修改数组

我应该在递归中使用全局变量吗

Linux分段故障(核心转储)

为什么我的二叉树删除删除整个左部分的树?

为什么GCC 13没有显示正确的二进制表示法?

在C中交换字符串和数组的通用交换函数

C 程序不显示任何输出,但它接受 CS50 Lab1 的输入问题

如何用用户输入的多个字符串填充数组?

clion.我无法理解 Clion 中发生的 scanf 错误

为什么实现文件中的自由函数默认没有内部链接?