5

I tried through different ways to copy an array pointer to another one, without any success. Here are my attempts, with the associated error message.

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 *’
}

I know I could use typedef coordinate* coordinates; instead, but it does not look very explicit to me.

4 Answers 4

5

You cannot assign arrays in C. Use memcpy to copy an array into another.

coordinates coord2;

memcpy(coord2, coord, sizeof coord2);
Sign up to request clarification or add additional context in comments.

2 Comments

At first, I was looking for a way to keep the same data, but only copy the pointer. However, it now looks clearly better to copy data. Thank you for the tip and the code.
@valentinLorentz of course if you don't need to copy the data, working with pointers would be more efficient.
1

When arrays are passed by value, they decay to pointers. The common trick to work around that is wrapping your fixed-size array in a struct, like this:

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

Now you can pass your wrapped arrays by value to functions, assign them, and so on.

Comments

0

Your coordinates need to be initialized as pointers

coordinates *coords2, *coords3;

Try that out and then assign.

2 Comments

But that won't actually copy the data.
true, it would be a pointer assigned to the same array @ouah has the better answer on this one
0

You cannot assign one array to another using the assignment operator, e.g. a = b, because an array doesn't know the size of itself.

This is the reason why we cannot assign one array to another using the assignment operator.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.