Mantén la atención porque en este escrito vas a encontrar la contestación que buscas.
Solución:
Los argumentos se pasan por valor, a menos que la firma de la función especifique lo contrario:
- en
void foo(type arg)
,arg
se pasa por valor independientemente de sitype
es un tipo simple, un tipo de puntero o un tipo de clase, - en
void foo(type& arg)
,arg
se pasa por referencia.
En el caso de matrices, el valor que se pasa es un puntero a los primeros elementos de la array. Si sabes el tamaño de la array en tiempo de compilación, puede pasar un array por referencia también: void foo(type (&arg)[10])
.
C++ siempre te da la opción: Todos tipos T
(excepto las matrices, consulte a continuación) se pueden pasar por valor haciendo que el tipo de parámetro T
y se pasa por referencia haciendo que el tipo de parámetro T &
referencia a-T
.
Cuando el tipo de parámetro no se anota explícitamente para que sea una referencia (type &myVariable
), es siempre pasado por valor independientemente del tipo específico. También para tipos definidos por el usuario (para eso está el constructor de copias). También para punteros, aunque copiar un puntero no copia lo que se apunta.
Las matrices son un poco más complicadas. Las matrices no se pueden pasar por valor, parámetro tipos como int arr[]
son en realidad una sintaxis diferente para int *arr
. No es el acto de pasar a una función lo que produce un puntero de un arrayvirtualmente todas las operaciones posibles (excluyendo solo algunas como sizeof
) hace eso. Una pueden pasar una referencia-a-un-arraypero esto explícitamente anotado como referencia: int (&myArray)[100]
(tenga en cuenta el ampersand).
C++ hace posible tanto pasar por valor como pasar por paradigmas de referencia.
Puede encontrar dos usos de ejemplo a continuación.
http://www.learncpp.com/cpp-tutorial/72-passing-arguments-by-value/
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
Los arreglos son construcciones especiales, cuando pasas un array como parámetro, se pasa como valor un puntero a la dirección del primer elemento con el tipo de elemento en el array.
Cuando pasa un puntero como parámetro, usted mismo implementa el paradigma de paso por referencia, como en C. Porque cuando modifica los datos en la dirección especificada, modifica exactamente el objeto en la función de llamada.
Sección de Reseñas y Valoraciones
Agradecemos que quieras estimular nuestra ocupación añadiendo un comentario y dejando una puntuación te estamos agradecidos.