El tipo T*
es el tipo de los punteros a T.
Un puntero a T representa una dirección (address) de memoria en la que hay almacenado un valor de tipo T.
// Puntero a int
int*
// Puntero a vector de int
vector<int>*
// Vector de punteros a int
vector<int*>
// Puntero a puntero de ints
int**
&variable
)*puntero
)NULL
Históricamente la dirección de memoria 0 está reservada para representar un puntero que no referencia a ninguna posición de memoria.
En C++ podemos escribir NULL
para indicar que un puntero tiene la dirección 0. Esto es meramente un reemplazo sintáctico.
nullptr
A partir de C++ 11 se incorporó el keyword nullptr
en reemplazo de NULL
. Esto refiere al tipo de dato nullptr_t
que sirve para representar punteros nulos.
La memoria en C++ se divide en tres regiones:
Nombre | En el... | Se administra... | Descripción |
---|---|---|---|
Global (Estática) | Ejecutable | Desde el ejecutable | Las variables estáticas existen durante todo el programa. Definiciones por fuera de las funciones o {} . |
Local (Automática) | Stack | Automáticamente | Las variables locales y los parámetros se almacenan en el stack. El tiempo de vida de las variables está dado por su scope. |
Dinámica | Heap | Manualmente | C++ provee dos operaciones para administrar la memoria dinámica: |
new T
: reserva espacio en el heap para almacenar un valor de tipo T
. Devuelve un puntero de tipo T*
a la dirección de memoria donde comienza ese espacio.delete p
: libera la memoria asociada al puntero p
.
Ambos operadores pueden usarse con corchetes para reservar y borrar arreglos de tamaño dinámico cuyo tamaño se elige en tiempo de ejecución. |