Tengo dos matrices de punteros a dobles que necesito intercambiar. En lugar de simplemente copiar los datos dentro de las matrices, sería más eficiente simplemente intercambiar los punteros a las matrices. Siempre tuve la impresión de que los nombres de matriz eran, básicamente, enlaces, pero el siguiente código, recibe un error de compilación:Intercambie matrices utilizando punteros en C++
double left[] = {1,2,3};
double right[] = {9,8,7};
double * swap = left;
left = right; // Error "ISO C++ forbids assignment of arrays"
right = swap; // Error "incompatible types in assignment of `double*' to `double[((unsigned int)((int)numParameters))]'"
Creación de las matrices dinámicamente resolvería el problema, pero no se puede hacer en mi solicitud. ¿Cómo hago que esto funcione?
El nombre de la matriz no es un puntero. El nombre de la matriz es una dirección de su primer elemento. – doc
Considerando que un puntero es una dirección a una variable.¿Por qué no puedo cambiar esas direcciones? – thornate
@thornate: la diferencia más relevante entre un nombre de matriz y una variable de puntero es que un nombre de matriz no es un valor l, por lo tanto, no puede ser el objetivo de una instrucción de asignación. Por lo tanto, la forma de hacer lo que desea es asignar los nombres de la matriz a las variables del puntero, que _are_ lvalues, luego cambiarlos. No hay forma de señalar el punto "izquierdo" o "derecho" a otra cosa, una vez que han sido definidos. –