I can think of a couple of uses...
If you need a function to return more than 1 value or an array:
Code:
int aFunction(int input, int *return2) {
int *b;
b = malloc(input * sizeof(int));
// put something in array
b[0] = 10;
b[input - 1] = 200;
*return2 = b;
return anotherValue;
}
scanf uses pointers to put read in values into whatever memory locations its supplied arguments are pointing to.
You need it for manipulating specific memory locations. I would suppose device drivers need this facility:
*((int*)0x200000) = 0x55;
This would put 0x55 in memory location 0x200000.
This is C though, I don't know if it would work in C++.