#include <iostream>

int main( ) {
   int* p = new int[3];       // pedir un arreglo de tres enteros que se asignará en el almacenamiento libre
                              // p recibirá la dirección a su primer elemento

   *p = 4;
   *(p + 1) = 7;
   *(p + 2) = 5;

   std::cout << p[0] << " " << p[1] << " " << p[2];
                              // si p es un apuntador, p[i] realmente ejecuta *(p + i)

   delete[] p;                // liberar el arreglo apuntado por p (si no lo liberamos, 
                              // el arreglo sobrevivirá hasta que el programa termine)
                              // importante: es un error ejecutar delete[] sobre algo ya liberado
}

