为什么y = x不适用于数组?

时间:2010-03-16 22:41:24

标签: c

为什么下面的C代码不能编译?看起来它应该只是改变指针的地址,但它会引发错误。

int x[10];
int y[10];
y=x;

5 个答案:

答案 0 :(得分:10)

xy是数组,而不是指针。在C中,数组不能改变大小或位置;只有他们的内容可以改变。您无法直接分配数组。

如果你想要一个指向其中一个数组的指针,你可以像这样声明一个。

int *z = x;

如果需要分配数组,可以创建包含数组的结构。 struct可以在C中分配。

答案 1 :(得分:7)

什么指针?你有两个数组。数组不是指针。指针在内存中保存单个变量的地址,而数组是指定大小的连续元素集合。

也就是说,无法分配数组。可以想象,y = x可以将x中的每个元素复制到y,但是这样的事情是危险的(意外地执行一项昂贵的操作,其中包含一些简单的任务)。不过你可以手动完成:

for (unsigned i = 0; i < 10; ++i)
    y[i] = x[i];

答案 2 :(得分:4)

y是静态分配的。你不能改变它指向的地方。

答案 3 :(得分:1)

因为数组是(有)指针(rvalue)但不是指针变量(左值)。

int a[10];
int *p;
p = a;   // OK
a = p;   // Compile Error

答案 4 :(得分:0)

y不是“指针”,而是固定数组。您应该将其视为“int *类型的常量”,因此您无法更改常量值

此致