What does this C statement mean?

前端 未结 5 1570
无人共我
无人共我 2020-12-01 03:55

I came across this line:

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

Can anybody tell me what it is?

相关标签:
5条回答
  • 2020-12-01 04:12

    http://cdecl.ridiculousfish.com/?q=void+%28*%28*x%29%28void+%28*%5B10%5D%29%28int+%29%29%29%28int+%29

    0 讨论(0)
  • 2020-12-01 04:13

    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.

    0 讨论(0)
  • 2020-12-01 04:21

    You can find explanations here:

    • How To Read Complicated C Declarations - does not compute
    • Reading C type declarations
    • C Declarations - Clockwise/Spiral Rule
    • C-FAQ Question 1.21 - Complex Declarations
    0 讨论(0)
  • 2020-12-01 04:23

    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

    0 讨论(0)
  • 2020-12-01 04:29

    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

    0 讨论(0)
提交回复
热议问题