在 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;
是指针赋值,现在 arr1
和 arr2
指向同一个数组(的头部),所以同一个数组打印在 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;
}
}
#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;
是指针赋值,现在 arr1
和 arr2
指向同一个数组(的头部),所以同一个数组打印在 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;
}
}