Los punteros en C++ son variables que almacenan direcciones de memoria de otras variables. Las direcciones de memoria determinan la ubicación de las variables en la computadora. De este modo, un puntero permite acceder tanto a la dirección de memoria de una variable como a su valor. Lo veremos mejor con los siguientes ejemplos.

Punteros sencillos en cpp

Punteros sencillos en cpp

El operador &

Con el operador & obtenemos la dirección de memoria de una variable en código hexadecimal.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string city = "London";

    cout << &city << endl; // 0x7ffe3f482e10

    return 0;
}

Ahora que ya sabemos como obtener una dirección de memoria, el siguiente paso será crear un puntero y asignarle una dirección para que apunte a una variable.

Crear el puntero con el operador *

La sintaxis para crear una variable puntero:  “tipo*  identificador”.

El tipo debe coincidir con el de la variable de la que obtenemos la dirección de memoria. El identificador es el nombre del puntero. Y el operador * determina que esta variable es un puntero.

En el siguiente ejemplo creamos un puntero a un string.  Al puntero ptr le asignamos la dirección de memoria de &city.  Ahora, desde ptr tenemos acceso tanto a la dirección de memoria de city como a su valor.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string city = "London";
    string* ptr = &city;
    
    cout << ptr << endl; // 0x7ffe3f482e10
    cout << *ptr << endl; // London

    return 0;
}

Aquí el operador * actúa de dos maneras diferentes:

  • Creador de un puntero (string* ptr)
  • Como operador de desreferencia o indirección (*ptr) para acceder al valor de la variable.

Cambiar el valor de un puntero

Si cambiamos el valor del puntero ptr también cambiará el valor de la variable city.

#include <iostream>
#include <string>
using namespace std;

int main() {
    string city = "London";
    string* ptr = &city;

    *ptr = "Barcelona";

    cout << *ptr << endl; // Barcelona
    cout << city << endl; // Barcelona

    return 0;
}

Punteros a punteros

Punteros básicos en C++

Punteros básicos en C++

Los punteros a punteros se definen con la siguiente sintaxis:            “tipo** identificador”. Se trata de punteros que contienen la dirección de memoria de otros punteros.

#include <iostream>
using namespace std;

int main() {
    int n = 5;
    int* ptr = &n;
    int** ptr2 = &ptr;

    cout << ptr << endl; // 0x7ffc97601224
    cout << *ptr2 << endl; // 0x7ffc97601224
    
    cout << *ptr << endl; // 5
    cout << **ptr2 << endl; // 5
    
    return 0;
}

En el anterior ejemplo creamos un puntero a un puntero a un entero (int** ptr2). A ptr2 le asignamos la dirección de memoria de un puntero a un entero (int* ptr), que a su vez contiene la dirección de memoria del entero int n.

Fuente: learn.microsoft


0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies