Pregunta

¿Las matrices se pasan de forma predeterminada por referencia o valor?Gracias.

¿Fue útil?

Solución

Se pasan como punteros.Esto significa que se pierde toda la información sobre el tamaño de la matriz.Sería mucho mejor utilizar std::vectors, que pueden pasarse por valor o por referencia, según elija, y que, por tanto, conservan toda su información.

A continuación se muestra un ejemplo de cómo pasar una matriz a una función.Tenga en cuenta que tenemos que especificar el número de elementos específicamente, ya que sizeof(p) daría el tamaño del puntero.

int add( int * p, int n ) {
   int total = 0;
   for ( int i = 0; i < n; i++ ) {
       total += p[i];
   }
   return total;
}


int main() {
    int a[] = { 1, 7, 42 };
    int n = add( a, 3 );
}

Otros consejos

En primer lugar, no se puede pasar una matriz por valor en el sentido de que se realiza una copia de la matriz.Si necesita esa funcionalidad, use std::vector o boost::array.

Normalmente, se pasa un puntero al primer elemento por valor.El tamaño de la matriz se pierde en este proceso y debe pasarse por separado.Las siguientes firmas son todas equivalentes:

void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size);   // the 7 is ignored in this context!

Si quieres pasar por referencia, el tamaño es parte del tipo:

void by_reference(int (&a)[7]);   // only arrays of size 7 can be passed here!

A menudo combinas el paso por referencia con plantillas, por lo que puedes usar la función con diferentes tamaños estáticamente conocidos:

template<size_t size>
void by_reference(int (&a)[size]);

Espero que esto ayude.

Las matrices son especiales:siempre se pasan como puntero al primer elemento de la matriz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top