Carls

Solo disponible en BuenasTareas
  • Páginas : 10 (2335 palabras )
  • Descarga(s) : 4
  • Publicado : 13 de junio de 2010
Leer documento completo
Vista previa del texto
8. Apuntadores
Los apuntadores son una parte fundamental de C. Si usted no puede usar los apuntadores apropiadamente entonces esta perdiendo la potencia y la flexibilidad que C ofrece básicamente. El secreto para C esta en el uso de apuntadores.
C usa los apuntadores en forma extensiva. ¿Porqué?
• Es la única forma de expresar algunos cálculos.
• Se genera código compacto y eficiente.• Es una herramienta muy poderosa.
C usa apuntadores explícitamente con:
• Es la única forma de expresar algunos cálculos.
• Se genera código compacto y eficiente.
• Es una herramienta muy poderosa.
C usa apuntadores explícitamente con:
• Arreglos,
• Estructuras y
• Funciones
8.1 Definición de un apuntador
Un apuntador es una variable que contiene ladirección en memoria de otra variable. Se pueden tener apuntadores a cualquier tipo de variable.
El operador unario o monádico & devuelve la dirección de memoria de una variable.
El operador de indirección o dereferencia * devuelve el ``contenido de un objeto apuntado por un apuntador''.
Para declarar un apuntador para una variable entera hacer:
int *apuntador;
Se debe asociar a cada apuntador untipo 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 elobjetivo 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 einicializadas 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 elvalor 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 comportamientoerrá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 por que se debe conocer en cuantos bytes esta guardado el dato. De tal forma, que cuando se incrementa un apuntador, se incrementa el apuntador por un ``bloque'' de memoria, en donde el bloque esta en función del tamaño del dato.
Por lo tanto para un apuntador a un char, se agrega un byte a...
tracking img