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

4 回答 4

5

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

coordinates coord2;

memcpy(coord2, coord, sizeof coord2);
于 2012-06-02T13:10:40.213 回答
1

当数组按值传递时,它们会衰减为指针。解决这个问题的常见技巧是将固定大小的数组包装在 a 中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]);

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

于 2012-06-02T13:22:45.930 回答
0

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

coordinates *coords2, *coords3;

试试看,然后分配。

于 2012-06-02T13:11:50.897 回答
0

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

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

于 2020-03-03T14:00:44.813 回答