Memory allocating functions return the pointer value, so it is generally
assigned to a pointer.
Passing a pointer to a function as an argument is a different story,
because changing it won't change the original (pass by value). That's
why we use pointers in these cases, to give the address of a variable
and change its value in the function.
If you need to pass a pointer instead, and change what it points to, use
a pointer to a pointer!
void
my_function(int **pointer)
{
*pointer = &something; // will change the pointer address
}
int *my_pointer = &something_else;
my_function(&my_pointer);