1: you can work with the address of the variable.
2: Function cannot return more than one value. But when the same function can modify many pointer variables and function as if it is returning more than one variable.
3:In the case of arrays, we can decide the size of the array at runtime by allocating the necessary space.
4: if you want to access a variable quickly or efficiently with out wasting c.p.u time you have only 2 ways..
one is declare it as a register variable...
and other one is declare it with a pointer....
because a c.p.u has less registers in it ( approximately 6 i.e A,B,C,D,E,F,G,H),
when no register are freely available then you CAN DO THAT TASK WITH ONLY POINTERS....
5:by using pointers you can improve the c.p.u's throughput time
(throughput time refers to no of jobs done by the c.p.u in unit amount of time)....
these are the advantages that can be acquired from pointers.