jueves, 4 de septiembre de 2008

Funciones

Las funciones son bloques de código utilizados para dividir un programa en partes más pequeñas, cada una de las cuáles tendrá una tarea determinada.
     Su sintaxis es:


tipo_función nombre_función (tipo y nombre de argumentos)
{
bloque de sentencias
}


tipo_función: puede ser de cualquier tipo de los que conocemos. El valor devuelto por la función será de este tipo. Por defecto, es decir, si no indicamos el tipo, la función devolverá un valor de tipo entero ( int ). Si no queremos que retorne ningún valor deberemos indicar el tipo vacío ( void ).


nombre_función: es el nombre que le daremos a la función.


tipo y nombre de argumentos: son los parámetros que recibe la función. Los argumentos de una función no son más que variables locales que reciben un valor. Este valor se lo enviamos al hacer la llamada a la función. Pueden existir funciones que no reciban argumentos.


bloque de sentencias: es el conjunto de sentencias que serán ejecutadas cuando se realice la llamada a la función.


     Las funciones pueden ser llamadas desde la función main o desde otras funciones. Nunca se debe llamar a la función main desde otro lugar del programa. Por último recalcar que los argumentos de la función y sus variables locales se destruirán al finalizar la ejecución de la misma.



Paso de parámetros a una función


     Como ya hemos visto, las funciones pueden retornar un valor. Esto se hace mediante la instrucción return, que finaliza la ejecución de la función, devolviendo o no un valor.


     En una misma función podemos tener más de una instrucción return. La forma de retornar un valor es la siguiente:




return ( valor o expresión );


     El valor devuelto por la función debe asignarse a una variable. De lo contrario, el valor se perderá.

    



Existen dos formas de enviar parámetros a una función:

Por valor: cualquier cambio que se realice dentro de la función en el argumento enviado, NO afectará al valor original de las variables utilizadas en la llamada. Es como si trabajaramos con una copia, no con el original. No es posible enviar por valor arrays, deberemos hacerlo por referencia.


Por referencia: lo que hacemos es enviar a la función la dirección de memoria donde se encuentra la variable o dato. Cualquier modificación SI afectará a las variables utilizadas en la llamada. Trabajamos directamente con el original.



 



Para enviar un valor por referencia se utiliza el símbolo & ( ampersand ) delante de la variable enviada. Esto le indica al compilador que la función que se ejecutará tendra que obtener la dirección de memoria en que se encuentra la variable.


     Vamos a fijarnos en los ejemplos. En el ejemplo anterior podrás comprobar que antes y después de la llamada, las variables mantienen su valor. Solamente se modifica en la función intercambio ( paso por valor ).


     En el siguiente ejemplo podrás ver como las variables intercambian su valor tras la llamada de la función ( paso por referencia ).


     Las variables con un * son conocidas como punteros, el único dato en 'C' que puede almacenar una dirección de memoria.

No hay comentarios: