Primeros pasos con los punteros

Introducción a los punteros

Los punteros son variables que almacenan la dirección de otra variable. Como función de lenguaje, están disponibles en varios lenguajes de programación como, entre otros:

  • Vamos -C/C++ -ada
  • Pascual
  • C# (disponible bajo ciertas restricciones) -COBOL
  • FORTRAN

Para comenzar con los punteros de C/C++, siga estos pasos

  1. Instale un compilador como Minimalistic GNU para Windows, http://www.mingw.org/wiki/Getting_Started

  2. Vaya a la carpeta de instalación de g ++ binario a través de la línea de comandos, por ejemplo:

    C:\MinGW\bin>
    
  3. Cree un archivo de texto y escriba este programa C++

    #include

    int main () {

    int  pointed=0;
    int* ptr = & pointed;
    
    std::cout<<"Address of pointed variable is: "<<ptr<<std::endl;
    
    return 0;
    

    }

  4. Guardar como puntero.cpp 5.En el símbolo del sistema, ejecute el comando

g++ -o puntero.exe -c puntero.cpp

  1. En el directorio de trabajo, obtendrá un ejecutable como pointer.exe, este exe al ejecutarse dará un resultado como

La dirección de la variable apuntada es: 0x7e892dac0a0c

Si recibe el resultado anterior, ha escrito su primer programa de puntero

¿Qué es un puntero?

Es básicamente la dirección de una variable en la memoria. Nos permite acceder indirectamente a una variable. Entonces, al usar punteros, podemos hablar sobre la dirección de una variable (así como su valor eliminando la referencia del puntero). Son útiles cuando queremos tratar con la dirección de una ubicación de memoria en lugar de su valor.

Considere la siguiente función de intercambio simple en C:

void Swap(int firstVal, int secondVal)
{
 int tempVal = firstVal;
 firstVal = secondVal;
 secondVal = tempVal;
}

ahora en main si tenemos el siguiente código:

.
.
int a = 9,b = 100;
swap(a,b);
//print a and b
.
.

Los valores de a y b permanecerían sin cambios, como queda claro al imprimir sus valores en la función principal. Para implementar correctamente la función de intercambio, en lugar de pasar los valores de las variables a y b, pasamos la dirección de las variables a y b como:

swap(&a,&b);

El operador &, devuelve la dirección de la variable. Se usa así:

int *address_of_a = &a;

int *address_of_a, establece que la variable address_of_a apunta a (almacena la dirección de) una variable entera.

Ahora nuestra función de intercambio correcta sería:

void Swap(int *firstaddress, int *secondaddress)
{
 int tempVal = *firstaddress;
 *firsaddress = *secondaddress;
 *secondaddress = tempVal;
}

Ahora los valores intercambiados se verían reflejados en la función principal:

int a = 9,b = 100;
swap(&a,&b);
//print

Siempre puede desreferenciar el puntero usando *, si no tiene la variable original. Supongamos que en una función no tiene la variable original pero tiene su dirección en una variable de puntero int *x. Simplemente podemos acceder al valor de la dirección de memoria como value = *x;

Si no tuviéramos punteros, nunca podríamos emular pasar por referencia en C, porque C es pasar por valor. Pero recuerda que solo podemos emular, porque incluso cuando usamos punteros, int *primera dirección, int *segunda dirección son solo variables de puntero locales creadas, que tienen la dirección de las variables a y b.