Say masz deklarację
int foo[42];
Częścią deklaratora jest foo[42]
. Ilekroć coś w tej samej postaci (tj. foo
, po którym następuje [
, po którym następuje wyrażenie, po którym następuje ]
) pojawia się w obrębie wyrażenia (a delaracja jest w zakresie), typ tego podeksperymentu będzie wynosił zadeklarowanego typu int
.
Ujmując to w inny sposób: Jeśli chodzi o składnię idzie, deklarację jak
int *bar;
robi nie zadeklarować bar
być typu int *
, ale zamiast deklaruje *foo
być typu int
.
dla bardziej zaangażowanych przykład przyjąć deklarację
float (*op[42])(float, float);
w wyrażeniu, operand z samej formie może wyglądać następująco
c = (*op[i])(a, b);
Według cytatu, prawej ręki miałby typ float
.
Oznacza to, że
*op[i]
musi mieć typ funkcyjny (możemy ignorować faktu, że Oznaczenia funkcyjne rozpad do odpowiednich rodzajów wskaźnik i wywołania funkcji przez Postfix ()
faktycznie działa na wskaźniki, a nie oznaczników).
To z kolei oznacza, że
op[i]
musi oznaczać wskaźnik funkcji, a my w końcu dotrzeć
op
oznaczający tablicę wskaźników funkcji jako to co możemy zastosować postfix []
na i dostać z powrotem właściwy typ.
zabawa, prawda;)
Twoje przykłady są tak łatwe do zrozumienia. Dziękuję z całego serca! –