Saltar al contenido

C++ pasa un array por referencia

Es importante interpretar el código bien antes de aplicarlo a tu trabajo y si tquieres aportar algo puedes compartirlo con nosotros.

Solución:

Las matrices solo se pueden pasar por referencia, en realidad:

void foo(double (&bar)[10])


Esto le impide hacer cosas como:

double arr[20];
foo(arr); // won't compile

Para poder pasar un tamaño arbitrario array a fooconviértalo en una plantilla y capture el tamaño de la array en tiempo de compilación:

template
void foo(T (&bar)[N])

    // use N here

Deberías considerar seriamente usar std::vectoro si tiene un compilador compatible con c++11, std::array.

Sí, pero cuando el argumento coincide con una referencia, el valor implícito array al puntero no es automático, por lo que necesita algo como:

void foo( double (&array)[42] );

o

void foo( double (&array)[] );

Tenga en cuenta, sin embargo, que al hacer coincidir, double [42] y double [] son tipos distintos. si tienes un array de una dimensión desconocida, coincidirá con la segunda, pero no con la primera, y si tienes una array con 42 elementos, coincidirá con el primero pero no el segundo. (Este último es, en mi humilde opinión, muy contrario a la intuición).

En el segundo caso, también tendrás que pasar la dimensión, ya que no hay forma de recuperarla una vez dentro de la función.

Si desea modificar solo los elementos:

void foo(double *bar);

es suficiente.

Si desea modificar la dirección a (por ejemplo: realloc), pero no funciona para matrices:

void foo(double *&bar);

es la forma correcta.

Si para ti ha resultado de provecho nuestro post, te agradeceríamos que lo compartas con otros seniors así nos ayudas a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *