C 无法将数组分配给其他数组

C 无法将数组分配给其他数组,c,C,我尝试通过不同的方法将数组指针复制到另一个,但没有成功。 以下是我的尝试,以及相关的错误消息 typedef long int coordinate; typedef coordinate coordinates[3]; void test(coordinates coord) { coordinates coord2 = coord; // error: invalid initializer coordinates coord3; coord3 = coord; /

我尝试通过不同的方法将数组指针复制到另一个,但没有成功。 以下是我的尝试,以及相关的错误消息

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坐标*坐标,但我觉得它不是很明确。

不能在C中分配数组。请使用
memcpy
将一个数组复制到另一个数组中

coordinates coord2;

memcpy(coord2, coord, sizeof coord2);

您的坐标需要初始化为指针

坐标*coords2,*coords3


试着这样做,然后赋值。

当数组按值传递时,它们会被赋值。解决这一问题的常见技巧是将固定大小的数组包装到
结构中,如下所示:

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]);

现在,您可以按值将包装好的数组传递给函数,分配它们,等等。

您不能使用赋值运算符将一个数组分配给另一个数组,例如
a=b
,因为数组不知道自身的大小


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

但这实际上不会复制数据。是的,这将是一个分配给同一数组的指针@ouah对此有更好的答案起初,我在寻找一种方法来保存相同的数据,但只复制指针。然而,现在看来复制数据显然更好。谢谢你的提示和代码。@valentinLorentz当然,如果你不需要复制数据,使用指针会更有效率。