DODATEK A PRZEWODNIK JĘZYKA C_______
wynikiem jest 1; jeśli odnosi się do tablicy, to wynikiem jest całkowita liczba bajtów zajmowanych przez tablicę. Jeśli odnosi się do struktury lub unii, to wynikiem jest liczba bajtów zajmowanych przez ten obiekt z uwzględnieniem bajtów, którymi należałoby ewentualnie go uzupełnić, by mógł być elementem tablicy' - rozmiar tablicy o n elementach równa się n razy rozmiar jednego elementu. Operator nie może odnosić się do funkcji, niekompletnego typu lub pola bitowego. Wynikiem jest stała całkowita bez znaku. Typ wyniku zależy od implementacji; w standardowym nagłówku <stddef.h> (patrz dodatek B) typ ten zdefiniowano jako size_t.
Poprzedzenie wyrażenia jednoargumentowego nazwą typu ujętą w nawiasy powoduje przekształcenie wartości tego wyrażenia do wskazanego typu.
wy rażenie-rzutowania:
wyraienie-jednoargumentowe ( nazwa-typu ) wyratenie-rzutowania
Taka konstrukcja nazywa się rzutem. Nazwy typów są opisane w p. A8.8, a skutki przekształceń w p. A6. Wyrażenie rzutowania nie jest 1-wartością.
Operatory multyplikatywne *, / i % są lewostronnie łączne.
wyraienie-multyplikatywne: wyratenie-rzutowania
wyraienie-multyplikatywne * wyratenie-rzutowania wyraienie-multyplikatywne / wyratenie-rzutowania wyraienie-multyplikatywne % wyratenie-rzutowania
Argumenty operatorów * i / muszą mieć typ arytmetyczny; argumenty operatora % muszą być całkowite. Argumenty podlegają zwykłym przekształceniom arytmetycznym, które również określają typ wyniku.
Dwuargumentowy operator * oznacza mnożenie.
Chodzi o to, że wszystkie elementy dowolnej tablicy muszą być prawidłowo położone w pamięci. - Przyp. tłum.
A7 WYRAŻENIA
Dwuargumentowy operator / daje w wyniku iloraz, a operator % — r pierwszego argumentu przez drugi. Wynik nie jest zdefiniowany, jeśli drugi argument równa się zero. W pozostałych przypadkach zawsze jest prawdą, że (a/b)*b + a%b równa się a. Jeśli oba argumenty są nieujemne, to reszta jest nieujemna i jest mniejsza niż dzielnik; w przeciwnym przypadku gwarantuje się tylko tyle, że wartość bezwzględna reszty jest mniejsza niż wartość bezwzględna dzielnika.
Operatory addytywne -I- i - są lewostronnie łączne. Jeśli oba argumenty mają typy arytmetyczne, to podlegają zwykłym przekształceniom arytmetycznym. Możliwe są również inne kombinacje typów argumentów tych operatorów.
wyrażeń ie-addyty wne:
wyraienie-multyplikatywne
wy rażenie-addytywne + wyraienie-multyplikatywne wyrażenie-addytywne - wyrażenie-multyplikatywne
Operator + daje w wyniku sumę swoich argumentów. Do wskaźnika do elementu dowolnej tablicy można dodać wartość o dowolnym typie całkowitym. Tę wartość przekształca się na przesunięcie adresowe, mnożąc ją przez rozmiar wskazywanego obiektu. Wynik jest wskaźnikiem tego samego typu, co wskaźnik początkowy, i wskazuje na inny element tej samej tablicy odpowiednio przesunięty względem elementu początkowego. Zatem jeśli P jest wskaźnikiem do elementu pewnej tablicy, to wyrażenie P+1 jest wskaźnikiem do następnego elementu tej tablicy. Wynik operacji nie jest zdefiniowany, jeśli otrzymany wskaźnik pokazuje poza obszar tablicy, za wyjątkiem pierwszej pozycji za koncern tablicy.
Dopuszczenie wskaźników pokazujących tuż za koniec tablicy jest nowe. Sankcjonuje to idiom powszechnie stosowany przy przeglądaniu elementów tablic.
Operator - daje w wyniku różnicę swoich argumentów. Od wskaźnika można odjąć wartość dowolnego typu całkowitego; obowiązują wtedy te same przekształcenia i ograniczenia, jak w przypadku dodawania.
Wynikiem odjęcia od siebie dwóch wskaźników tego samego typu jest wartość całkowita ze znakiem, odpowiadająca odstępowi między wskazywanymi obiektami; wskaźniki wskazujące na kolejne obiekty różnią się o 1. Typ wyniku zależy od implementacji; w standardowym nagłówku <stddef.h> jest on zdefiowany jako ptrdiff_t. Wynik nie jest zdefiniowany, jeśli wskaźniki nie wskazują na elementy tej samej tablicy; jeśli jednak P wskazuje na ostatni element tablicy, to (P+1)-P równa się 1.
271