#include <stdio.h>

#define PRINT(x) printf("%-24s: %zu\n", #x, sizeof(x))

int main(void)
{
	// 포인터의 배열을 가리키는 포인터를 반환하는 함수 포인터의 배열을 가리키는 포인터
	// declare foo as pointer to array 17 of pointer to function (void) returning pointer to array 23 of pointer to char
	char *(*(*(*foo)[17])(void))[23];

	PRINT(        foo             );
	PRINT(       *foo             );
	PRINT(      (*foo)[0]         );
	PRINT(      (*foo)[0]()       );
	PRINT(    *((*foo)[0]())      );
	PRINT(   (*((*foo)[0]()))[0]  );
	PRINT( *((*((*foo)[0]()))[0]) );

	return 0;
}
