Compra un libro ^_^

Il modo più chiaro per capire i puntatori a mio parere è quello di pensarli come un indirizzo (che poi è quello che sono). Quando usi un puntatore non passi in giro il valore, ma il suo indirizzo e, quando deferenzi (*ptr) un puntatore non fai altro che "andare" a quell'indirizzo. Questo a varie conseguenze ad esempio che le modifiche vengono apportate sempre "nello stesso posto".

Se ora ti possono sembrare inutili quando comincerai a fare un po' di strutture dati ti renderai conto della loro utilità.