为什么下面的C代码不能编译?看起来它应该只是改变指针的地址,但它会引发错误。
int x[10];
int y[10];
y=x;
答案 0 :(得分:10)
x
和y
是数组,而不是指针。在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 *类型的常量”,因此您无法更改常量值
此致