【问题标题】:Assigning one array to another array c++ [duplicate]将一个数组分配给另一个数组c ++ [重复]
【发布时间】: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 引用(即它具有 &),调用此按引用传递与实际按引用传递冲突。

标签: c++ arrays


【解决方案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】:

    数组在函数声明中被静默(隐式)转换为指针,并复制指针。当然复制的指针和原来的指针指向同一个位置,所以你可以在你的函数中通过复制的指针来修改原始数组中的数据。

    【讨论】:

      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      相关资源
      最近更新 更多