¿Las matrices se pasan de forma predeterminada por ref o value? Gracias.¿Cómo se pasan las matrices?
Respuesta
Se pasan como punteros. Esto significa que se pierde toda la información sobre el tamaño de la matriz. Se recomienda mucho más el uso de std :: vectores, que se pueden pasar por valor o por referencia, según lo que elija, y que, por lo tanto, conservan toda su información.
Aquí hay un ejemplo de pasar una matriz a una función. Tenga en cuenta que debemos 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);
}
Las matrices son especiales: siempre se pasan como un puntero al primer elemento de la matriz.
En primer lugar, no 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, un puntero al primer elemento se pasa por valor. El tamaño de la matriz se pierde en este proceso y se debe pasar por separado. Las firmas siguientes son 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 desea 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 se combinan pase por referencia con las plantillas, por lo que se pueden utilizar la función con diferentes tamaños estáticamente conocidos:
template<size_t size>
void by_reference(int (&a)[size]);
Espero que esto ayude.
- 1. ¿Las matrices numpy se pasan por referencia?
- 2. Cómo se pasan las cadenas al método .like() de SQLAlchemy
- 3. ¿Cómo se pasan las variables de C# a javascript?
- 4. ¿Cómo se sincroniza automáticamente cuando pasan las pruebas automatizadas?
- 5. ¿Cómo se pasan las cookies en el protocolo HTTP?
- 6. ¿Se pasan las estructuras dentro de las clases como valor?
- 7. ¿Cómo se usan las matrices débiles?
- 8. ¿Cómo se implementan las matrices en Java?
- 9. ¿Cómo se implementan las matrices en Perl?
- 10. ¿Las matrices de JavaScript realmente se implementan como matrices?
- 11. ¿Cómo se pasan los argumentos para definir_metodo?
- 12. ¿Cómo se pasan los parámetros desde xaml?
- 13. ¿Las variables PHP se pasan por valor o por referencia?
- 14. Java: cómo funcionan las matrices
- 15. ¿Cómo se implementa la longitud en las matrices de Java?
- 16. ¿Cómo se implementan las matrices asociativas en PHP?
- 17. ¿Cómo las matrices 2D en C se convierten en matrices 1D?
- 18. ¿Cómo se pasan objetos entre View Controllers en Objective-C?
- 19. ¿Cómo se pasan múltiples valores enum en C#?
- 20. ¿Cómo los objetos jQuery imitan las matrices?
- 21. ¿Se pasan objetos PHP5 por referencia?
- 22. Infierno de dependencia: ¿cómo se pasan las dependencias a objetos profundamente anidados?
- 23. ¿Cómo ordeno las matrices usando vbscript?
- 24. ¿Cómo hago referencia a las matrices multidimensionales?
- 25. ¿Cómo se pasan datos a un IValueConverter en XAML?
- 26. ¿Cómo se pasan los argumentos de función en C?
- 27. ¿Cómo se pasan los parámetros de PUT a una página?
- 28. PHP Soap llamada no WSDL: ¿cómo se pasan los parámetros?
- 29. ¿Las matrices C# son seguras?
- 30. Compara dos matrices, ¿hay elementos comunes entre las dos matrices?
Gracias Neil, pero como mencioné en una de mis publicaciones de ayer, actualmente estoy trabajando en excersizes desde TC++ PL y tengo que usar matrices oridinarias. Me preguntaba si es necesario escribir algo como: void f (int (& a) [size]); o es solo suficiente para declarar como una matriz sin ref. –
Así que básicamente a juzgar por esta respuesta pasaron por valor que es el tamaño de un puntero. ¿Estoy en lo cierto? –
@ una buena razón para no aprender C++ de TC++ PL, en mi humilde opinión. –