Entradas en "punteros"

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;
}
Leer más