【发布时间】: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 引用(即它具有&),调用此按引用传递与实际按引用传递冲突。