将一个数组分配给另一个数组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 ++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将一个字符数组分配给另一个会产生错误。为啥?

无法将数组分配给打字稿中的另一个数组

如何将 PHP 数组分配给 jQuery 数组? [复制]

PLSQL:将一个函数返回的数组分配给另一个函数中定义的数组

c/c++ 将 RGBQUAD 数组分配给位图

提取列值并将其作为 Spark 数据帧中的数组分配给另一列