Hmm... Let's see...
Oh, functions can't return arrays in C. That would be a pointer. Well, that makes it easier.
double **(**(*)(char *))(int)
It did take a couple minutes, but I just woke up. Also, idiomatically there would be a typedef: typedef double **A(int);
typedef A **B(char *);
B *
That took a few seconds to write.