Envío de parámetros a función
Cuando se realiza una llamada a una función se reserva memoria para los parámetros que se le envían , posteriormente se copian en ella los valores de manera ordenada y atendiendo al tipo definido, después se ejecuta el cuerpo de la función.
Las propiedades que tienen son:
- Los parámetros tienen que coincidir en orden y tipo con la definición de la función.
- Los parámetros formales son variables locales , luego no genera ningún problema si toman el mismo valor o distinto con alguna variable usada en el programa principal o otra sección.
A una función se le pueden pasar los parámetros de dos maneras
-
Paso por valor el paso por valor consiste en enviar valores o variables que tras una evaluación tienen un valor que se almacena en las variables reservadas en la variable que la función reserva para recibir como parámetros.
-
Paso por referencia (en primer lugar vamos a decir que es un paso por valor también , solo que en este caso enviamos una dirección de memoria en vez de un valor) , se envía una dirección de memoria y para hacer esto, hay que enviar , o un puntero o anteponer el & antes de la variable o el nombre de un array que es la dirección de memoria al primer elemento de este.
Cosas a tener en cuenta.
- Cuando se modifica ahora uno de estos valores no estamos modificando el valor ya que hemos enviado la dirección entonces al salir de la función los valores modificados quedarán como los hemos dejado en la función y no como estaban anteriormente.
-
Modificar los valores enviados se puede hacer (si no se han enviado como const) pero esto a veces puede tener problemas, a veces esto es correcta como por ejemplo en el caso de querer ordenar dos números , es tan válido caviar las direcciones como intercambiar los valores a los que apuntan
-
A veces no hay otra manera, el caso de enviar una cadena o un array, solo se puede hacer enviando la referencia(enviar los 200 caracteres de una cadena parámetro a parámetro ... tela ).
-
El envío por referencia suele ser más optimo desde el punto de vista tanto temporal como de consumo de memoria ram , esto es así porque pasar una matriz por referencia implica enviar una dirección de memoria, que es el equivalente a copiar un int, los parámetros que no se alteren, pues no consumen, mientras que si hay que pasar toda la matriz parámetro a parámetro esto podría tener más consumo que el que me va a costar realizar mi operación , y desde el punto de vista de la memoria no implicaría más que la reserva de un entero.
-
Es una manera de poder devolver más de un parámetro (además del de retorno).
Efectos laterales de las funciones Este concepto hace referencia a cuando una función modifica un valor más allá de la función en el caso de que una de las variables sean globales (global) , son efectos a veces inesperados a veces forzados (es conveniente evitarlos en lo posible).