Probé a través de diferentes maneras de copiar un puntero de matriz a otro, sin ningún éxito. Aquí están mis bashs, con el mensaje de error asociado.
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 *' }
Sé que podría usar typedef coordinate* coordinates;
en cambio, pero no me parece muy explícito.
No puede asignar matrices en C. Use memcpy
para copiar una matriz en otra.
coordinates coord2; memcpy(coord2, coord, sizeof coord2);
Cuando las matrices se pasan por valor, decaen a los punteros . El truco común para evitar eso es envolver su matriz de tamaño fijo en una struct
, como esta:
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]);
Ahora puede pasar sus arreglos envueltos por valor a las funciones, asignarlos, etc.
Tus coordenadas deben ser inicializadas como punteros
coordinates *coords2, *coords3;
Pruébalo y luego asignalo.