Tecnico Informatica
Estructura de Datos
2NV30
Melo Gonzalez Jose
Mendez Alvarez Pablo
-------------------------------------------------
Puntero
Un puntero o apuntador es una variable que da referencia a una región de memoria; en otras palabras es una variable cuyo valor es una dirección de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene unadirección de memoria en la que se encuentra almacenado un valor ' v ' se dice que ' p ' apunta a ' v '.El programador utilizará punteros para guardar datos en memoria en muchas ocasiones, de la forma que se describe a continuación.
Para declarar un apuntador para una variable entera hacer:
int *apuntador;
Se debe asociar a cada apuntador un tipo particular. Por ejemplo, no se puedeasignar 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: unapuntador 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ónde 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 muyestricto 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)++;
flq = flp;
}
NOTA: Un apuntador a cualquier tipo de variables es una dirección en memoria -- la cual es una dirección entera, pero un apuntador NO es un entero.
La razón por la cual se asocia un apuntador a un tipo de dato, es porque se debe conocer en cuantos bytes está...
Regístrate para leer el documento completo.