如果我声明了两个数组(arr1
和arr2
),例如,分别键入大小为10的int
,并初始化了第一个数组,那么我希望在arr1
中创建一个arr2
的副本;为什么我不能只给出arr2 = arr1
指令?
我知道可以分配两个相同类型的结构。为什么数组不是这种情况?
最佳答案
数组的问题在于,在所有表达式中(传递给sizeof
和一元&
运算符时除外),它们都将转换为指向其第一个元素的指针。
因此,假设您有:
int arr1[10];
int arr2[10];
...
然后,如果你写类似
arr1 = arr2;
您实际上是在尝试这样做:
arr1 = &arr2[0];
或这个:
&arr1[0] = &arr2[0];
在这两种情况下,都存在阻止代码编译的问题。在前一种情况下,您尝试在两个不兼容的类型(数组vs指针)之间进行分配,而在后一种情况下,您尝试修改常量指针(
&arr1[0]
)。关于c - 为什么不能分配相同类型和大小的数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14826952/