Function pointer expression : <p>So I've got the following expression:</p>

<pre><code>int (*f1(int(*a)(int, int))) (int, int);
</code></pre>

<p>and I'm trying to make sense out of it, but it's confusing. I figured out that "a" is a pointer to a function which takes 2 arguments(int, int).
Then f1 seems to be a pointer to another function that takes 2 int arguments. 
But what's confusing me is how f1 relates to a. </p>

<p>Can someone give me some hints or properly explain what the above expression is doing?</p>
