将一个数组分配给另一个数组c ++ [重复]
Posted
技术标签:
【中文标题】将一个数组分配给另一个数组c ++ [重复]【英文标题】:Assigning one array to another array c++ [duplicate] 【发布时间】:2014-07-14 01:52:33 【问题描述】:你好,我是 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);
【问题讨论】:
是pass by reference
关于数组的奇怪规则继承自 1970 年代的 C 编程,没有人改变过它们,因为太多现有代码会破坏。相反,您不鼓励在 C++ 中使用数组。而是使用std::vector
,它具有数组在大多数高级语言中的行为。
This answer 很长,但值得一读。您的所有问题都在其中得到解答。
@AhmedHamdy,这不是通过引用传递的。数组衰减为一个指针,该指针复制到函数的参数中,它本身相当于有一个参数char *a
。通过参数 being 引用(即它具有 &
),调用此按引用传递与实际按引用传递冲突。
【参考方案1】:
它不是在复制数组;它把它变成一个指针。如果你修改它,你会自己看到:
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
。
【讨论】:
【参考方案2】:数组在函数声明中被静默(隐式)转换为指针,并复制指针。当然复制的指针和原来的指针指向同一个位置,所以你可以在你的函数中通过复制的指针来修改原始数组中的数据。
【讨论】:
以上是关于将一个数组分配给另一个数组c ++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章