将一个数组分配给另一个数组c++; 你好,我是C++初学者,有人能给我解释一下这个< /P> char a[]="Hello"; char b[]=a; // is not legal

将一个数组分配给另一个数组c++; 你好,我是C++初学者,有人能给我解释一下这个< /P> char a[]="Hello"; char b[]=a; // is not legal,c++,arrays,C++,Arrays,鉴于 char a[]="Hello"; char* b=a; // is legal 如果一个数组不能复制或分配给另一个数组,为什么它可以作为参数传递,而传递的值总是在方法中进行复制 void copy(char[] a){....} char[] a="Hello"; copy(a); 数组在函数声明中以静默方式(隐式)转换为指针,并复制指针。当然,复制的指针指向与原始指针相同的位置,因此您可以通过函数中复制的指针修改原始数组中的数据。它不是复制数组;它把它变成了一个指针。如果修

鉴于

char a[]="Hello";

char* b=a; // is legal 
如果一个数组不能复制或分配给另一个数组,为什么它可以作为参数传递,而传递的值总是在方法中进行复制

void copy(char[] a){....}

char[] a="Hello";

copy(a);

数组在函数声明中以静默方式(隐式)转换为指针,并复制指针。当然,复制的指针指向与原始指针相同的位置,因此您可以通过函数中复制的指针修改原始数组中的数据。

它不是复制数组;它把它变成了一个指针。如果修改它,您将亲自看到:

void f(int x[]) { x[0]=7; }
...
int tst[] = {1,2,3};
f(tst); // tst[0] now equals 7
如果需要复制阵列,请使用:


如果您发现自己在这样做,您可能会想使用。

这是
通过引用传递
有关数组的奇怪规则是从1970年的C编程中继承下来的,没有人会更改它们,因为太多现有代码会破坏它们。相反,你不鼓励在C++中使用数组;而是使用
std::vector
,它具有数组在大多数高级语言中的行为。这本书很长,但很值得一读。你所有的问题都在里面得到了回答。@AhmedHamdy,这不是通过引用。数组衰减为指针,指针被复制到函数的参数中,该参数本身相当于有一个参数
char*a
。通过作为引用的参数调用此按引用传递与实际按引用传递冲突(即,它具有
&
)。
int a1[] = {1,2,3};
int a2[3];
std::copy(std::begin(a1), std::end(a1), std::begin(a2));