Tablice i wskaźniki to tematy, które mocno się ze sobą łączą.
Przy dynamicznym alokowaniu danych, stosuje się wskaźnik, który przechowuje adres początku przydzielonego bloku pamięci. Nazwa tablicy jest także wskaźnikiem do jej pierwszego elementu.
Na przykładzie Twojego programu, tworząc 3 - elementową tablicę. Wskaźnik na int jest adresem pierwszego elementu tablicy (&tablica[0]). Adresem następnego elementu jest tablica+sizeof(int), a adresem ostatniego elementu tablicy jest tablica+2*sizeof(int).
1. Co do pierwszej pętli, to zastosowano w niej równowazny do wskaźnikowego, sposób zapisu danych to tablicy. Z użyciem wskaźników wyglądałoby, to tak:
for (int i=0;i<ile;i++)
{
*(tablica+i)=i;
*(tablica+i)+=50;
}
2. W drugiej pętli po zmodyfikowaniu zawartości danego elementu tablicy, inkrementowany jest wskaźnik. Po inkrementacji wskazuje on na następny element tablicy, dzięki temu może zmodyfikować zawartość wszystkich elementów.
3. W pierwszym zapisie do wcześniej utworzonego wskaźnika na int o nazwie tablica, przypisywany jest adres początku przydzielonego bloku pamięci. Następnie tworzysz nowy wskaźnik na int o nazwie wskaznik i do niego przypisujesz adres który przechowuje wskaźnik o nazwie tablica.
W drugim zapisie do utworzonego wskaźnika na int o nazwie wskaznik przypisujesz adres, który przechowuje wskaźnik o nazwie tablica. Następnie do wskaźnika o nazwie tablica zostanie przypisany adres, który zwraca operator new.
W zasadzie przy jednym i drugim zapisie jest praktycznie robione to samo, tylko w różnej kolejności (przypisanie wskaźnika do innego wskaźnika oraz użycie operatora new, który zwraca adres.)