Wyniki są takie dzięki możliwości operacji arytmetycznych na wskaźnikach pokazujących adresy elementów jednej tablicy.
Nazwa tablicy to adres jego pierwszego elementu, czyli dla przykładu:
int tablica[10] = {0,1,2,3,4,5,6,7,8,9};
int* pointer_tab = tablica;
cout << *pointer_tab; // rezultat: 0;
pointer_tab++; // teraz wskaźnik pokazuje na drugi element;
cout << *pointer_tab // rezultat: 1
pointer_tab+= 1; // wskazuje na 3 element
cout << *pointer_tab // rezultat: 2
pointer_tab = &tablica[9]; // wskaźnik pokazuje na ostatni element
cout << pointer_tab - tablica; //rezultat 9
Wskaźnik sam wie o ile ma się przesunąć w przód/tył przy dodawaniu/odejmowaniu dzięki swojej definicji. Dla powyższego przykładu wskaźnik wie że jest typu int (4bajty) i przy dodawaniu przesuwa się o 4 bajty do przodu, analogicznie dla odejmowania. Przy odejmowaniu wskaźników od siebie tak naprawdę jest obliczane ile elementów ich dzieli.