Czy arytmetyka wskaźnikowa nadal działa poza tablicą?

Zawsze czytam, że arytmetyka wskaźnika jest zdefiniowana tak długo, jak nie opuszczasz granic tablicy. Nie jestem pewien, czy całkowicie rozumiem, co to znaczy i byłem trochę zmartwiony. Stąd to pytanie.

Załóżmy, że zaczynam od wskaźnika na początek tablicy:

int *p = (int*) malloc(4 * sizeof(int));

Teraz tworzę dwa nowe wskaźniki, które leżą poza granicami tablicy:

int *q = p + 10;
int *r = p - 2;

Teraz wskazówkiq-10, q-9, ...,r+2, r+3, i tak dalej, wszystkie leżą w granicach tablicy. Czy są ważne? Na przykład jestr[3] gwarantowane dać taki sam wynik jakp[1]?

Zrobiłem kilka testów i działa. Ale chcę wiedzieć, czy jest to objęte zwykłymi specyfikacjami C. W szczególności korzystam z Visual Studio 2010, Windows i programuję w natywnym C (nie C ++). Czy jestem objęty?

questionAnswers(3)

yourAnswerToTheQuestion