1) speed, when you want to deallocate something not needed

a) for example in games (we don't need to see things that are not visible etc.)

2) when you want to change value of variable through function argument

3) many libraries you gonna use requires sending pointers

4) device drivers

5) some structure algorithms like two-link list

6) when you don't know how many variables are needed and you need to dynamically allocate memory