您好我是c ++的初学者,有人可以向我解释这个
char a[]="Hello";
char b[]=a; // is not legal
而,
char a[]="Hello";
char* b=a; // is legal
如果无法将数组复制或分配给另一个数组,为什么它可以作为参数传递,其中传递的值的副本总是在方法中进行
void copy(char[] a){....}
char[] a="Hello";
copy(a);
答案 0 :(得分:10)
它不是复制数组;它把它变成指针。如果你修改它,你会亲眼看到:
void f(int x[]) { x[0]=7; }
...
int tst[] = {1,2,3};
f(tst); // tst[0] now equals 7
如果您需要复制数组,请使用std::copy
:
int a1[] = {1,2,3};
int a2[3];
std::copy(std::begin(a1), std::end(a1), std::begin(a2));
如果您发现自己这样做,可能需要使用std::array
。
答案 1 :(得分:2)
数组以静默方式(隐式)转换为函数声明中的指针,并复制指针。当然复制的指针指向与原始位置相同的位置,因此您可以通过函数中复制的指针修改原始数组中的数据。