apuntadores

Páginas: 9 (2083 palabras) Publicado: 11 de julio de 2013
APUNTADORES.
Los aputadores son una parte fundamental de C. Si no puedes usar los apuntadores apropiadamente entonces esta perdiendo la pontencia y la flexibilidad que C ofrece basicamente. El secreto para C esta en el uso de apuntadores.
C usa los apuntadores en forma extensiva. ¿Por qué? genera código más compacto y eficiente. Se usan apuntadores explícitamente con:
Arreglos.
Estructuras.Funciones.
Variables.
DEFINICION DE UN APUNTADOR
Un apuntador es una variable que contiene la direccion en memoria de otra variable. El operador unario ‘&’ devuelve la direccion de memoria de una variable.
El operador de indireccion o de referencia ‘*’ devuelve el contenido de un objeto apuntado por un apuntador.
ejemplo:
int *apuntador; //Apuntador de una variable entera
Se debe asociar acada apuntador un tipo particular. Por ejemplo, no se puede asignar la direccion de una short int a un long int.
Para tener una mejor idea, considera el siguiente codigo:
#include
main(){
int x=1;
int y=2;
int *apunt;
ap = &x;
y = *ap;
x = ap;
*ap = 3;
}
Cuando se compile el codigo se mostrara el siguiente mensaje:
warning: assignment makes integer from pointer without a cast
Con elobjetivo de entender el comportamiento del codigo 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 algun lado.
int x = 1;
int y = 2;
int *ap;
ap = &x;
0×100 0×200 0×300
x —> 1 y —> 2 ap —> 100
Las variables x e y son declaradas e inicializadas con 1 y 2respectivamente, ap es declarado como un apuntador a entero y se le asigna la direccion de x (&x). Por lo que ap se carga con el valor 100.
y = *ap;
0×100 0×200 0×300
x —> 1 y —> 1 ap —> 100
Despues 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;
0×100 0×200 0×300
x —> 100 y —> 1ap —> 100
Como se ha visto C no es muy estricto en la asignacion de valores de diferente tipo(apuntador a entero). Asi 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;
0×100 0×200 0×300
x —> 3 y —> 1 ap —> 100
Finalmente se asigna un valor al contenido de un apuntador (*ap).Importante: Cuando un apuntador es declarado apunta algun lado. Se debe inicializar el apuntador antes de usarlo. Por lo que:
#include
int main(){
int *ap;
*ap = 100;
}
Puede generar un error en tiempo de ejecucion o presentar un comportamiento erratico.
El uso correcto sera:
#include
int main(){
int *ap;
int x;
ap = &x;
*ap = 100;
}
Con los apuntadores se puede realizar tambienaritmetica, por ejemplo:
#include
int main(){
float *flp, *flq;
*flp = *flp + 10;
++*flp;
(*flp)++;
flq = flp;
}
Nota: Un apuntador a cualquier tipo de variables es una direccion en memoria — la cual es una direccion entera, pero un apuntador NO es una entero.
La razon por la cual se asocia un apuntador a un tipo de dato,, es po que no se debe conocer en cuantos bytes esta guardado eldato. De tal forma, que cuando se incrementa un apuntador, se incrementa el apuntador por un “bloque” de memoria, en donde el bloque esta en funcion del tamaño del dato.
Por tanto para un apuntador a un char, se agrega un byte a la direccion y para un apuntador a entero o flotante se agregan 4 bytes. De esta forma si a un apuntador a flotante se le suman 2, el apuntador entonces se mueve dosposiciones float que equivalen a 8 bytes.
APUNTADORES A FUNCIONES.
Cuando C pasa argumentos a funciones, los pasa por valor, es decir, si el parametro es modificado dentro de la funcion, una vez que termina la funcion el valor pasado de la variable permanece inalterado.
Hay muchos casos que se quiere alterar el argumento pasado a la funcion y recibir el nuevo valor una vez que la funcion ha...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Apunte
  • Apuntes
  • apuntes
  • apuntes
  • apuntes
  • apuntes
  • Apunte
  • apuntes

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS