在 C++ 中使用“=”运算符使两个数组相等

Using '=' operator to make two arrays equal in C++

    #include <iostream>
using namespace std;

void Fun(int arr1[], int arr2[])
{
    arr1=arr2;
    for(int i=0;i<5;i++)
    {
        cout<<arr1[i]<<" "<<arr2[i]<<endl;
    }
}

int main() {
    int arr1[5];
    int arr2[5];
    for(int i=0;i<5;i++)
    {
        arr1[i]=i+1;
        arr2[i]=i;
    }
    
    Fun(arr1,arr2);
    
    for(int i=0;i<5;i++)
    {
        cout<<arr1[i]<<" "<<arr2[i]<<endl;
    }
    
    return 0;
}

为什么在上面的代码中,Fun函数中arr1=arr2,但是从函数返回时,arr1只有初始值?

当你这样做时:

arr1 = arr2;

您只是将数组 arr2 的地址分配给 arr1。因此,虽然这使得它 看起来 就像在函数内部复制数组一样,但这实际上并没有复制数组的内容。

为此,您可以像这样使用 std::copy

std::copy(arr2, arr2 + 5, arr1);

这里是 demo

在函数参数中,int arr1[]int *arr1的含义相同。

arr1=arr2;

是指针赋值,现在 arr1arr2 指向同一个数组(的头部),所以同一个数组打印在 Fun().

另一方面,赋值只影响指针而不影响指向的数组,因此不会影响main()函数。

要复制数组的内容,可以使用std::copy

#include <iostream>
#include <algorithm> // for std::copy

void Fun(int arr1[], int arr2[])
{
    std::copy(arr2, arr2 + 5, arr1);
    for(int i=0;i<5;i++)
    {
        std::cout<<arr1[i]<<" "<<arr2[i]<<std::endl;
    }
}