Apuntadores y Funciones
Enviado por a851105 • 7 de Septiembre de 2011 • 688 Palabras (3 Páginas) • 471 Visitas
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
...