ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Apuntadores y Funciones


Enviado por   •  7 de Septiembre de 2011  •  688 Palabras (3 Páginas)  •  471 Visitas

Página 1 de 3

Lección 13: Apuntadores y Funciones

Cuando C pasa argumentos a funciones, los pasa por valor, es decir, si

el parámetro es modificado dentro de la función, una vez que termina la

función el valor pasado de la variable permanece inalterado.

Hay muchos casos que se quiere alterar el argumento pasado a la función y

recibir el nuevo valor una vez que la función ha terminado. Para hacer lo anterior

se debe usar una llamada por referencia, en C se puede simular pasando un

puntero al argumento. Con esto se provoca que la computadora pase la

dirección del argumento a la función.

Para entender mejor lo anterior consideremos la función swap() que intercambia

el valor de dos argumentos enteros:

void swap(int *px, int *py);

main()

{

int x, y;

x = 10; y = 20;

printf("x=%dty=%dn",x,y);

swap(&x, &y);

printf("x=%dty=%dn",x,y);

}

void swap(int *px, int *py)

{

int temp;

temp = *px; /* guarda el valor de la direccion x */

*px = *py; /* pone y en x */

*py = temp; /* pone x en y */

}

Para declarar un apuntador para una variable entera hacer:

int *apuntador;

Se debe asociar a cada apuntador un tipo particular. Por ejemplo, no se puede asignar la dirección de un short int a un long int.

Para tener una mejor idea, considerar el siguiente código:

main()

{

int x = 1, y = 2;

int *ap;

ap = &x;

y = *ap;

x = ap;

*ap = 3;

}

Cuando se compile el código se mostrará el siguiente mensaje:

warning: assignment makes integer from pointer without a cast.

Con el objetivo de entender el comportamiento del código supongamos que la variable x esta en la localidad de la memoria 100, y en 200 y ap en 1000. Nota: un apuntador es una variable, por lo tanto, sus valores necesitan ser guardados en algún lado.

int x = 1, y = 2;

int *ap;

ap = &x;

100 200 1000

x 1 y 2 ap 100

Las variables x e y son declaradas e inicializadas con 1 y 2 respectivamente, ap es declarado como un apuntador a entero y se le asigna la dirección de x (&x). Por lo que ap se carga con el valor 100.

y = *ap;

100 200 1000

x 1 y 1 ap 100

Después y obtiene el contenido de ap. En el ejemplo ap apunta a la localidad de memoria 100 -- la localidad de x. Por lo tanto, y obtiene el valor de x -- el cual es 1.

x = ap;

100 200 1000

x 100 y 1 ap 100

Como se ha visto C no es muy estricto en la asignación de valores de diferente tipo (apuntador a entero). Así que es perfectamente legal (aunque el compilador genera un

...

Descargar como (para miembros actualizados) txt (4 Kb)
Leer 2 páginas más »
Disponible sólo en Clubensayos.com