25

I came across this line:

void (*(*x)(void (*[10])(int *)))(int *)

Can anybody tell me what it is?

Tony The Lion
  • 59,704
  • 62
  • 233
  • 403

4 Answers4

43

To break this down yourself, start from the inner most parentheses and work your way out.

  1. (*[10]) <---- Array of 10 pointers
  2. (*[10])(int *) <------ Array of 10 pointers to functions which has a pointer to int as its argument
  3. (void (*[10])(int *)) <------ Array of 10 pointers to functions which has a pointer to int as its argument and returns void
  4. (*x)(void (*[10])(int *)) <------- x is a pointer to a function which has as an argument (an array of 10 pointers to functions which has a pointer to int as its argument and returns void)

.....

I stopped partway through, but hopefully that helps.

Mysticial
  • 452,826
  • 45
  • 327
  • 325
Jesse Good
  • 48,564
  • 14
  • 115
  • 165
10

cdecl is very helpful for this kind of thing. It says:

declare x as pointer to function (array 10 of pointer to function (pointer to int) returning void) returning pointer to function (pointer to int) returning void

Seth Carnegie
  • 72,057
  • 21
  • 174
  • 247
5

You can find explanations here:

Alexey Frunze
  • 59,618
  • 10
  • 77
  • 173
3

A pointer to a function which has an array of 10 pointers to functions that has int * argument and return type void as argument, and returns a pointer to a function which has int * argument and return type void.

Source

Tim Cooper
  • 151,519
  • 37
  • 317
  • 271