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

配列が値で渡されると、ポインターに減衰します。これを回避するための一般的なトリックは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配列はそれ自体のサイズを知らないため、代入演算子を使用して1つの配列を別の配列に割り当てることはできません。

これが、代入演算子を使用して1つの配列を別の配列に割り当てることができない理由です。

于 2020-03-03T14:00:44.813 に答える