#include <stdio.h>

typedef struct {
  unsigned int a ; 
} deepest_t ;  

typedef struct {
  deepest_t* deepest_ptr ;
} deeper_t ; 

typedef struct {
  deeper_t*  deeper_ptr ;
} deep_t ; 

typedef struct {
  void* data ;
} data_container_t ; 

//-------------------------------

int main(void)
{
    deepest_t deepest = {
      .a = 5, 
    } ; 
    
    deeper_t deeper = { 
      .deepest_ptr = &deepest, 
    } ;
    
    deep_t deep = { 
      .deeper_ptr = &deeper,
    } ;
    
    data_container_t data_container = {
      .data = &(((deeper_t*) deep.deeper_ptr)->deepest_ptr),
    } ; 
    
//-------------------------------

    deepest_t * d = *((deepest_t**)(data_container.data));
    
    printf(" %u \n", (*d).a);
    
	return 0;
}
