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

Apuntadores y Funciones

a8511057 de Septiembre de 2011

688 Palabras (3 Páginas)502 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 aviso de cuidado) asigna el valor actual de ap a la variable x. El valor de ap en ese momento es 100.

*ap = 3;

100 200 1000

x 3 y 1 ap 100

Finalmente se asigna un valor al contenido de un apuntador (*ap).

Importante: Cuando un apuntador es declarado apunta a algún lado. Se debe inicializar el apuntador antes de usarlo. Por lo que:

main()

{

int *ap;

*ap = 100;

}

puede generar un error en tiempo de ejecución o presentar un comportamiento errático.

El uso correcto será:

main()

{

int *ap;

int x;

ap = &x;

*ap = 100;

}

Con los apuntadores se puede realizar también aritmética entera, por ejemplo:

main()

{

float *flp, *flq;

*flp = *flp + 10;

++*flp;

(*flp)++;

...

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