Maestros de la indirección
Este problema lo diseñé hace unos años, cuando le daba clases a mi amiga Marta para preparar su examen final de programación en la universidad. En cuestiones de punteros en C++ soy de los que piensan que no hay medias tintas; o eres capaz de resolver este ejercicio en unos minutos (cuatro o cinco de media, aunque el tiempo no es importante), o no te has enterado de nada.
Esta vez no hay premio porque para obtener la solución sólo hay que compilarlo y ejecutarlo. Papel, lápiz y 300 segundos: ¿Cuál es la salida del programa?
PS: Marta por supuesto sacó un 10!
PS2: No hay punteros a funciones porque esta vez no entraban en el temario.
#include <iostream>
int main()
{
void *x[2];
char *y=(char*)new void*[3];
void *z=y;
*x=&z;
*(void**)y=(((char*)x)+sizeof(void*));
y+=2*sizeof(void*);
x[1]=(void*)y;
*((void**)x[1])=(void**)z+1;
*((char**)z+1)=new char[1<<4];
((void**)z)[0x2]=((void**)z)+1;
y=((char**)z)[1];
y[0]=y[1]=*(y+2)=*&y[3]=0140;
y[3]+=&x[1]-x;
y[2]+=(((void**)x[1])-(void**)z)*0x6;
*(&(*(&(*(&(*y))))))+=8;
*(&(*(&(*(&(*(y+1)))))))+=017;
y[4]=(1<<5)%(1<<6);
y[5]='6'*2+1;
*(y+0x6)=*((**(char***)*(x+1))+3);
y[(1<<3)-1]=*y==228?*y/(char)2:(char)57*2;
y[(1<<3)-0]=y[(1<<3)-1]+2;
y[(1<<3)+1]=*(y+6);
y[012]=0x21;
y[013]=y[012]-23;
y[014]=y[013]-10;
std::cout<<******(char*******)x;
}







