DODATEK A PRZEWODNIK JĘZYKA C____-
tablicą o pięciu elementach, z których każdy jest tablicą o siedmiu elementach całkowitych. Każde z wyrażeń: x3d, x3d[i], x3d[i][j] oraz x3d[i][j][k] ma sens w wyrażeniach. Pierwsze trzy są typu „tablica”, ostatnie zaś jest typu int. Dokładniej, x3d[i][j] jest tablicą złożoną z siedmiu elementów całkowitych, a x3d[i] jest tablicą złożoną z pięciu tablic o siedmiu elementach całkowitych.
Operację indeksowania tablicy definiuje się w ten sposób, że E1[E2] jest identyczne z *(E1+E2). Zatem, mimo asymetrycznego wyglądu, indeksowanie jest operacją przemienną. Zgodnie z regułami przekształceń, odnoszącymi się do operatora + i do tablic (p. A6.6, A7.1, A7.7), jeśli E1 jest tablicą, a E2 jest całkowite, to E1[E2] wyznacza element o numerze E2 w tablicy E1.
W naszym przykładzie x3d[i][j][k] jest równoważne z *(x3d[i][j] + k). Pierwsze podwyrażenie x3d[i][j] jest przekształcane (zgodnie z p. A7.1) do typu „wskaźnik do tablicy o elementach całkowitych”; dodawanie (zgodnie z p. A7.7) powoduje pomnożenie k przez rozmiar obiektów całkowitych. Wynika to z zasady mówiącej, że tablice umieszcza się w pamięci wierszami (ostatni indeks zmienia się najszybciej) oraz że pierwszy wymiar w deklaracji tablicy pozwala określić wielkość zużytej przez tablicę pamięci, ale przy indeksowaniu nie odgrywa żadnej roli.
A8.6.3 Deklaratory funkcji
W nowym stylu deklaracji funkcji T D, w której D ma postać D1 (lista-typów-parametrów)
a typem identyfikatora w deklaracji T D1 jest „modyfikator-typu T”, typem identyfikatora w D jest „modyfikator-typu funkcja z argumentami lista-typów-parametrów zwracająca typ T”.
Składnia parametrów ma postać
lista-typów-parametrów: lista-parametrów lista-parametrów , ...
lista-parametrów:
deklaracja-parametru lista-parametrów , deklaracja-parametru
deklaracja-parametru:
specyfikatory-deklaracji deklarator specyfikatory-deklaracji deklarator-abstrakcyjny0Pc
powered by
A8 DEKLARACJE_____I__.-
W deklaracji w nowym stylu lista parametrów wskazuje typy parametrTfWTAzliztl^Ui-nym przypadkiem jest deklarator funkcji bezparametrowej, w którym lista typów parametrów zawiera jedynie słowo kluczowe void. Jeśli lista typów parametrów kończy się wielokropkiem „ , to funkcja może akceptować więcej argumentów, niż jawnie podano; patrz p. Al3.2.
Typy takich parametrów, jak tablice czy funkcje, są - zgodnie z regułami przekształcania parametrów - zamieniane na wskaźniki; patrz p. A 10.1. Jedynym specyfikato-rem klasy pamięci, dozwolonym w specyfikatorze deklaracji parametru, jest register.
Ten specyfikator jest ignorowany, jeśli deklarator funkcji nie jest nagłówkiem definicji funkcji. Podobnie, jeżeli deklaratory w deklaracji parametrów zawierają identyfikatory, a deklarator funkcji nie rozpoczyna definicji funkcji, to te identyfikatory są natychmiast usuwane. Deklaratory abstrakcyjne, które nie wprowadzają identyfikatorów, będą opisane w p. A8.8.
W starym stylu deklaracji funkcji T D, w której D ma postać D1 (lista-identyfikato rów opc)
a typem identyfikatora w deklaracji T D1 jest „modyfikator-typu T”, typem identyfikatora w D jest „modyfikator-typu funkcja o nieokreślonych argumentach zwracająca typ T”. Parametry (o ile istnieją) mają postać
lista-identyfikatorów: identyfikator
lista-identyfikatorów , identyfikator
Jeśli deklaracja nie rozpoczyna definicji funkcji, to w deklaracji funkcji w starym stylu nie można umieścić listy identyfikatorów (p. A10.1). Taka deklaracja nie zawiera żadnych informacji o typach parametrów.
Na przykład deklaracja int f(), *fpi(), (*pfi)();
wprowadza funkcję f zwracającą wartość całkowitą, funkcję fpi zwracającą wskaźnik do obiektów całkowitych oraz wskaźnik pfi do funkcji zwracającej wartość całkowitą.
Dla żadnej z tych funkcji nie podano typów parametrów - wszystkie deklaracje są w starym stylu.
W deklaracji w nowym stylu:
int strcpy(char *dest, const char *source), rand(void);
N - Język ANSI C 289