Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 2 de 212/18 en el curso~15 min
Lecciones del módulo (2/2)

Punteros

Los punteros son una de las características más potentes y distintivas de C++. Permiten acceder directamente a la memoria física del ordenador, lo que permite una gestión eficiente de los recursos y un alto rendimiento.


1. ¿Qué es la Memoria y una Dirección?

Cada variable que declaras en tu programa se almacena en una celda de la memoria RAM. Cada celda tiene una dirección de memoria única (normalmente expresada en formato hexadecimal, ej. 0x7ffee3bf87ac).

C++ nos permite obtener la dirección de memoria de cualquier variable utilizando el operador de dirección &:

Code
int x = 42;
std::cout << &x; // Stampa l'indirizzo di memoria di x (es. 0x7ffee3bf87ac)

2. Definición de Puntero

Un puntero es una variable especial que almacena como valor la dirección de memoria de otra variable.

La sintaxis requiere el uso del asterisco * después del tipo de datos:

Code
int x = 42;
int* ptr = &x; // ptr è un puntatore a intero che contiene l'indirizzo di x

3. El Operador de Dereferencia (*)

Para acceder o modificar el valor almacenado en la dirección a la que apunta un puntero, utilizamos el operador de dereferencia (o indirección), también representado por el símbolo *:

Code
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Stampa 42 (il valore a cui punta ptr)

*ptr = 100; // Modifica il valore di x tramite il puntatore
std::cout << x;    // Ora stampa 100!

4. Punteros Nulos: nullptr

Un puntero que no apunta a ninguna dirección válida debe inicializarse con la palabra clave nullptr (introducida en C++11):

Code
int* ptr = nullptr; // Puntatore nullo e sicuro

Pruébalo tú mismo

Ejercicio#cpp.m5.l2.e1
Intentos: 0Cargando...

En el main hay una variable value inicializada en 42. Declara un puntero a entero ptr que apunte a la dirección de value. Utiliza la dereferencia de ptr para establecer el valor de value en 100, finalmente imprime value usando std::cout.

Cargando editor...
Mostrar pista

Declara el puntero con `int* ptr = &value;`, modifica el valor dereferenciando `*ptr = 100;`, y imprime `std::cout << value;`.

Solución disponible después de 3 intentos

Ejercicio#cpp.m5.l2.e2
Intentos: 0Cargando...

Define una función doubleValue que acepte un puntatore a entero (int* ptr) y multiplique por 2 el valor al que apunta (si el puntero no es nulo). En el main, llama a doubleValue pasándole la dirección de la variable num y imprímela.

Cargando editor...
Mostrar pista

La función debe aceptar `int* ptr`. En su interior, usa `*ptr = (_ptr) _ 2`. En el main llámala con `doubleValue(&num);`.

Solución disponible después de 3 intentos

Cuestionario#cpp.m5.l2.q1
Listo

Dado el código mostrado, ¿qué expresión permite modificar directamente el valor de a estableciéndolo en 10?

Code
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Opciones de respuesta