¿Cómo se pasan las matrices?
-
23-09-2019 - |
Pregunta
¿Las matrices se pasan de forma predeterminada por referencia o valor?Gracias.
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.