2011-11-23 28 views
22

natknąłem tej linii:Co oznacza to stwierdzenie C?

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

Czy ktoś może mi powiedzieć co to jest?

+2

Jest to quiz, czy co? :) – FailedDev

+25

Łatwo odpowiedzieć: To bałagan. –

+22

Odpowiedź jest zawsze http://www.cdecl.org. – mkb

Odpowiedz

41

Aby to przełamać siebie, początek od wewnętrznej strony nawiasów i wypracuj sobie wyjście.

  1. (*[10]) < ---- Array z 10 wskaźników
  2. (*[10])(int *) < ------ Array z 10 wskaźników do funkcji, które posiada wskaźnik do int jako argument
  3. (void (*[10])(int *)) < --- --- Tablica 10 wskaźników do funkcji, które mają wskaźnik do int jako argument i zwraca void
  4. (*x)(void (*[10])(int *)) < ------- x jest wskaźnikiem do fu nction który ma jako argument (tablicę 10 wskaźników do funkcji, które posiada wskaźnik do int jako argument i zwraca void)

.....

zatrzymałem partway dzięki, ale mam nadzieję, że pomaga.

+0

Chciałbym przegłosować to, gdybym miał dzisiaj więcej głosów do wykorzystania. –

+0

Pójdę po kawę, jeśli ostatnio nie miałem filiżanki. –

3

Wskaźnik do funkcji, którą ma tablicę 10 wskaźników do funkcji który ma int * argument i powrotu typu nieważny argumentu i powraca wskaźnik do funkcji, którą ma int * argument i typ zwrotu nieważne.

Source

+0

Ostatecznym pytaniem jest, jak byś się zastanowił, gdybyś tego nie zrobił? –

+1

@TonyTheLion, bez pytań, dlaczego ktoś napisałby coś takiego bez rozbijania go na mniejsze kawałki? –

9

cdecl jest bardzo pomocne dla tego typu rzeczy. Mówi:

deklaruje x jako wskaźnik do funkcji (tablica 10 wskaźnik do funkcji (wskaźnik na int) powrocie void) powrót wskaźnika do funkcji (wskaźnik na int) powrocie void