¿Cuál es exactamente el propósito del (asterisco) en los punteros?

Soy nuevo en programación y estoy tratando de entender la idea de 'punteros'.

int main()
{
    int x = 5;
    int *pointerToInteger = & x;
    cout<<pointerToInteger;

}

¿Por qué es eso cuando yocout << pointerToInteger; la salida es un valor hexadecimal, PERO cuando usocout << *pointerToInteger; la salida es 5 (x = 5).

Respuestas a la pregunta(4)

Su respuesta a la pregunta