jueves, 18 de noviembre de 2010

Punteros (Lab)

Los punteros son variables de tipo dinámico que apuntan a una dirección de memoria de otra variable, por lo cual tenemos acceso a ella.
Declaración de un puntero
tipo de variable *nombre-puntero;


int *rober;
double *ramon;
char *cecy;


Cuando ponemos estas declaraciones decimos al compilador que le "haga espacio" a la dirección de una variables según su tipo, con la cual lo tendrá el nombre que le pusimos al puntero.


por ejemplo
int rober; //declaro y hago memoria a una variable entera
int *puntero_de_rober;  //puntero
puntero_de_rober = &rober;  // se escribe la direccion de 
//memoria donde esta la variable rober


por si no lo sabían :P cuando ponemos &rober; implica que es la dirección de la variable.


Podemos decir esquemáticamente que cada variable tiene esto:


rober
  • Dirección de rober XXXX
  • posicion de memoria ocupada por puntero_de_rober YYYY
  • valor contenido de rober
  • posicion de memoria ocupada por rober XXXX
  • implicitamente tambien el tamaño en bytes de la variable
El símbolo & dirección, puede aplicarse en variables, funciones, menos en constantes o expresiones porque estas no tienen una posición asignada.


La operación inversa de la asignación de un puntero, se puede utilizar para saber cual es el valor de la variable apuntada ejemplo:


x = rober;
x = *puntero_de_rober;

printf("%d", rober );
printf("%d", *puntero_de_rober);


Otro ejemplo


#include < stdio.h >
int main(int argc, char** args){
    char hola; //variable caracter
    char *phola; //puntero a variable
    phola = &hola; //se asigna al puntero la direccion

    for(hola ='a'; hola <='z'; hola++)
       printf("%c", *phola); //imprime el valor de la 
                            //variable apuntada
    
    return 0;
}


El for incrementa el valor de la variable, después para imprimir utilizamos el puntero, el programa imprimiría lo mismo (el abecedario) si lo escribiéramos printf("%c", hola);


Link de donde saque esta información aqui
Espero que mi explicación les sirva, si tienen algún comentario acerca de esta entrada, espero me digan ya que estoy abierto a cualquier error.

1 comentario: