Deklaracja wskaznika na typ int
int * w;
Czyli utworzenie zmiennej, która w sobie może przechowywać adres zmiennej typu int w pamięci.
Po takiej deklaracji wartość jest niezdefiniowana, czyli w ma w sobie jakiś przypadkowy adres,
nie wolno go używać.
Zaalokowanie tablicy z elementami typu int, rozmiar tej tablicy to ile elementów.
Adres zerowego elementu w tej tablicy zapisany zostanie we wskaźniku w.
w = new int [ile];
W tym przypadku ile ma wartość 10, czyli w pamięci zostanie zarezerwowanych 10 elementów typu int:
+---- na ta komorke [0] w pamieci wskazuje wskaźnik w
| (w tym przykładzie jest to wartość: 94669150871184)
\|/
: (rozmiar jednej komórki w tej tablicy to rozmiar int = 4 bajty)
:
: ...... ta komórka [1] ma adres: 94669150871188
: :
....----+----+----+----+----+----+----+----+----+----+----+----....
.... | | | | | | | | | | | ....
....----+----+----+----+----+----+----+----+----+----+----+----....
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
Wypisanie wartości wskaźnika w (czyli adresu):
cout<<(long long)w<<endl;
Wykorzystano tutaj rzutowanie na typ long long, jednak rzutowanie wskaźnika na typ całkowity nie zawsze zadziała, nie powinno się tego robić, nie jest to po prostu przenośne.
Zwiekszenie wskażnika w o jeden element:
w++;
Typem, na który wskazuje w jest int, czyli wartość zostanie zwiękoszona o jeden element typu int, czyli o 4 bajty.
Podsumowując program wyświetla adresy wszystkich komórek w zaalokowanej tablicy.
UWAGA: Program wykonuje niedozwoloną operację w linii 22:
delete []w;
W tym momencie w ma wartość: adres końca tablicy (w tym przykładzie: 94669150871224).
delete musi otrzymać dokładnie tą samą wartość, jaka została zwrócona przy alokacji, czyli w tym przypadku wartość: 94669150871184.
To jest krytyczny błąd w tym programie, takie coś może zdestabilizować działanie niektórych systemów operacyjnych.