Asignación de dirección a variable entera

¿Cómo puede asignar una dirección a una variable entera como esta? El compilador no dará un error. Siempre pensé que solo se pueden asignar valores enteros a una variable entera.

int a=0x28ff1c

Puede hacer lo mismo para una variable char, el compilador no dará un error

char b=0x28ff1c

Se mostrará en el valor de basura de la pantalla de la consola para char b y un valor aleatorio para int a

cout<<b
    <<endl;
cout<<a;

¿Puede alguien explicarme por qué hay una diferencia en la salida para char b e int a. Alguien también puede explicarme por qué una variable char y una variable entera pueden tener direcciones asignadas

Respuestas a la pregunta(4)

Su respuesta a la pregunta