Udostępnij za pośrednictwem


Arytmetyczny wskaźnik

Operacje dodawania obejmujące wskaźnik i liczbę całkowitą dają znaczące wyniki tylko wtedy, gdy operand wskaźnika adresuje składową tablicy, a wartość całkowita generuje przesunięcie w granicach tej samej tablicy. Gdy wartość całkowita jest konwertowana na przesunięcie adresu, kompilator zakłada, że tylko pozycje pamięci o tym samym rozmiarze znajdują się między oryginalnym adresem a adresem oraz przesunięciem.

To założenie jest prawidłowe dla elementów członkowskich tablicy. Zgodnie z definicją tablica jest serią wartości tego samego typu; jego elementy znajdują się w ciągłych lokalizacjach pamięci. Jednak magazyn dla wszystkich typów, z wyjątkiem elementów tablicy, nie ma gwarancji, że zostanie wypełniony przez ten sam typ identyfikatorów. Oznacza to, że wartości puste mogą występować między pozycjami pamięci, a nawet pozycjami tego samego typu. W związku z tym wyniki dodawania lub odejmowania z adresów wszystkich wartości, ale elementy tablicy są niezdefiniowane.

Podobnie, gdy odejmowane są dwie wartości wskaźnika, konwersja zakłada, że tylko wartości tego samego typu, bez wartości pustych, znajdują się między adresami podanymi przez operandy.

Zobacz też

Operatory dodawania języka C