jueves 9 de abril de 2009

CURSO FUNCIONES EN C. PASO DE ARGUMENTOS Y PUNTEROS (TERCERA PARTE)

Como se puede observar el valor de i ha cambiado puesto que la función modificar ha utilizado la dirección de memoria de esta variable en la sentencia de asignación * variable = 9. Analicemos detenidamente este ejemplo. Lo primero que tenemos que tener en cuenta es la premisa de que en C todos los argumentos se pasan por valor sigue siendo cierta. Lo que sucede es que en este caso estamos pasando el valor de la dirección de memoria de la variable i y no el valor de su contenido. Para pasar la dirección de memoria de una variable se utiliza el operador &. Al finalizar la función, el valor ded dicha dirección permanece igual y lo que se ha modificado es el contenido de esa dirección de memoria. Dentro de la función se utilizan los punteros para tabajar con las direcciones de memoria (*variable).
Dado que el paso de argumentos por referencia es común en C, conviene que en este punto ampliemos el concepto de puntero.
Consideremos las siguientes declaraciones:

int dato;
int * puntero;

La primera de las declaraciones reserva memoria para almacenar una variable de tipo entero (int) mientras que la segunda declaración reseva memoria para almacenar una dirección. A pesar de que apuna a una variable de tipo entero, lo que se va a almacenar es una dirección. Como en el fundo un puntero puede apuntar a cualquier cosa., C permite la declaración de punteros tipo void. Supongamos que el compilador reserva la dirección en hexadecimal bffff120 para la variable dato y la dirección en hexadecimal 0012fed4 para el puntero.
Autor: Fundamentos de Programación, de J.M.Molina y F.Chamorro ed.McGraw Hill