Punteros en C

Voy a estar editando cosas sobre C de vez en cuando, no va a ser un tutorial desde cero, sino cosas que a mi me llevaron tiempo entender o que implican un grado de complejidad moderado, es necesario un entendimiento mínimo del lenguaje, así como de como compilar y ejecutar los programas.

Punteros, memoria y todo eso.

Como sabemos, C mezcla características de lenguajes de algo nivel y bajo nivel, esto ultimo nos sirve para lo que vamos a desarrollar ahora.

Como sabemos (y si no sabes ahora te enteras), que los datos se almacenan en memoria, y que la memoria tiene una forma de enumeración hexadecimal, bueno, un puntero, es una variable que contiene la dirección de memoria de otra variable, mediante la cual podemos cambiar su valor, mejor pongo un código para que lo entiendan mejor

#include

int main(int argc, char *argv[])
{

    int a,*b;
    a = 2;
    b = &a;

    printf ("\nLa posicion de memoria de a es %p y vale %i",b,*b);
    return 0;

}

Vamos a ver que hay aca:

Linea 5: Declaramos a como entero y *b como puntero entero, para diferenciar los punteros de las variables normales usamos asterisco en la declaración.

Linea 7: Después de asignar el valor 2 a a, asignamos al puntero bla posición de memoria de a, notese que cuando queremos asignar la dirección de memoria al puntero no usamos un asterisco y usamos el signo & para referirnos a la dirección de memoria de a.

Linea 9: Para probar que hicimos todo bien, imprimimos la posición de memoria y el valor de a, fíjense que cuando imprimimos una dirección de memoria de un puntero usamos %p , en la parte de las variables, el orden es posición de memoria y valor entero, entonces, para imprimir la posición de memoria usamos solamente b y cuando queremos imprimir el valor de a mediante b, entonces usamos *b que es para acceder al valor de la variable a la que apunta b.

Tendriamos que tener una salida parecida a esta cuando ejecutamos el programa

La posición de memoria de a es 0xbfcceab8 y vale 2

Cambiando valores mediante punteros

Todo muy lindo no? Pero por ejemplo, que pasa si queremos cambiar el valor de una variable mediante su puntero?

Es simple, de la misma forma que accedemos al valor mediante el puntero, se puede cambiar el valor de la variable.

#include

int main(int argc, char *argv[])
{

    int a,*b;
    a = 2;
    b = &a;

    printf ("\nLa posicion de memoria de a es %p y vale %i\n",b,*b);

    *b+=5;

    printf ("\nLa posicion de memoria de a es %p y vale %i\n",b,*b);

    return 0;

}

Aca vemos como hacer eso en la linea 11, simplemente accedemos al valor del puntero mediante *b, y modificamos como si fuera una variable normal

La salida va a ser algo parecido a esto

La posicion de memoria de a es 0xbfe7f0b8 y vale 2

La posicion de memoria de a es 0xbfe7f0b8 y vale 7

Como podemos ver, que cambio el valor de a, y no cambio su posición de memoria.

Eso es todo por hoy gente, cualquier duda en los comentarios

Alex

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s