Contenido del Curso
C++ Smart Pointers
C++ Smart Pointers
Comprender los Pointers
Qué es un Puntero
Puedes pensar en los punteros como coordenadas. Nos señalan ubicaciones específicas en la memoria y nos permiten acceder a los datos almacenados en esas ubicaciones.
Cuando declaras un puntero, creas una variable que contiene la dirección de memoria de otra variable. Puedes crear un puntero usando los operadores *
y &
.
pointer
int value = 42; // `p_value` now holds the memory address of `value` int* p_value = &value;
Punteros Nulos
Puedes usar palabras clave especiales para representar un puntero nulo null
o nullptr
. Un puntero nulo no apunta a ninguna dirección de memoria válida. Es esencialmente un puntero sin objetivo.
También puedes inicializar el puntero de tipo entero a null
(o nullptr
). Hacemos esto cuando no queremos asociar el puntero con un valor específico de inmediato.
null_pointer
int* p_int = null; // `p_int` is initialized to be null double* p_double = nullptr; // `p_double` is initialized to be null
Reasignación de Punteros
Los punteros pueden ser reasignados para apuntar a diferentes direcciones de memoria. Sin embargo, reasignar un puntero sin una gestión adecuada puede llevar a problemas como fugas de memoria o punteros colgantes.
reassigning_pointers
int x = 42; // Create an integer variable and assign a value to it int y = 43; // Create another integer variable int* p_int = &x; // Make the `p_int` variable point to the address of the integer variable `x` p_int = &y; // Reassign the `p_int` variable to `y`
Aritmética de Punteros
La aritmética de punteros es un aspecto fascinante de los punteros. Te permite recorrer la memoria incrementando o decrementando la dirección que tiene un puntero.
Por ejemplo, considera el siguiente código donde creamos un arreglo de enteros y luego definimos un puntero para almacenar la dirección del arreglo. Dado que un arreglo contiene múltiples elementos, un puntero, por defecto, almacena la dirección del primer elemento, que en este caso es el entero 1.
pointer_arithmetic
// Defining an array of integers int arr[5] = {1, 2, 3, 4, 5}; // The pointer holds the memory address of the first element in the array int* p_int = arr; // Incrementing the pointer makes the pointer point to the second value p_int = p_int + 1; // Dereference the pointer to get the actual second value int second_element = *p_int; // Equals to `2`
Para acceder al segundo elemento, incrementa el puntero en 1 y luego desreferéncialo usando el operador (*
). Desreferenciar devuelve el valor almacenado en la dirección de memoria que tiene el puntero (en este caso, el entero 2). ¡Sigue los comentarios en el código para entender cada paso!
¡Gracias por tus comentarios!