无法将一个数组赋值给另一个数组

5

我尝试过多种方法将一个数组指针复制到另一个数组中,但都没有成功。以下是我的尝试及相应的错误信息。

typedef long int coordinate;
typedef coordinate coordinates[3];

void test(coordinates coord) {
    coordinates coord2 = coord; // error: invalid initializer
    coordinates coord3;
    coord3 = coord; // error: incompatible types when assigning to type ‘coordinates’ from type ‘long int *’
    coord3 = (coordinates) coord; // error: cast specifies array type
    coord3 = (coordinate[]) coord; // error: cast specifies array type
    coord3 = (long int*) coord; // error: incompatible types when assigning to type ‘coordinates’ from type ‘long int *’
}

我知道我可以使用typedef coordinate* coordinates;,但对我来说它不够明确。

4个回答

5

在 C 语言中,你不能直接将一个数组赋值给另一个数组。你需要使用 memcpy 函数来将一个数组的值复制到另一个数组中。

coordinates coord2;

memcpy(coord2, coord, sizeof coord2);

起初,我正在寻找一种方法来保持相同的数据,但仅复制指针。然而,现在复制数据显然更好。 感谢您的提示和代码。 - Valentin Lorentz
@valentinLorentz 当然,如果您不需要复制数据,使用指针将更加高效。 - ouah

1

当数组按值传递时,它们会退化为指针。解决这个常见问题的技巧是将固定大小的数组包装在一个struct中,像这样:

struct X {
    int val[5];
};

struct X a = {{1,2,3,4,5}};
struct X b;
b = a;
for(i=0;i!=5;i++)
    printf("%d\n",b.val[i]);

现在您可以将封装后的数组通过值传递给函数、赋值等。

0

使用赋值运算符(例如 a = b)无法将一个数组分配给另一个数组,因为数组本身不知道自己的大小。

这就是为什么我们不能使用赋值运算符将一个数组分配给另一个数组的原因。


0
你的坐标需要初始化为指针
试一下这个: coordinates *coords2, *coords3; 然后再进行赋值。

但那并不会真正地复制数据。 - robert
如果是true,那么它将指向相同的数组。@ouah在这方面有更好的答案。 - Rishi Diwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接