First of all, in C / C ++, “global” means the scope of the file (although if you declare a global header, it is included in files that # include this header).
Using pointers as parameters is useful when the calling function has some data that the called function should change, for example, in your examples. Pointers as parameters are especially useful when a function that changes its input does not know exactly what it is modifying. For instance:
scanf("%d", &foo);
scanf knows nothing about foo, and you cannot modify its source code to give it knowledge of foo. However, scanf accepts pointers to variables, which allows it to change the value of any arbitrary variable (the types it supports, of course). This makes it more reusable than depending on global variables.
In code, you usually prefer to use pointers to variables. However, if you notice that you are transmitting the same piece of information for many functions, a global variable may make sense. That is, you should prefer
int g_state; int foo(int x, int y); int bar(int x, int y); void foobar(void); ...
to
int foo(int x, int y, int state); int bar(int x, int y, int state); void foobar(int state); ...
Basically, use global values for values that should be shared by everyone in the file in which they are located (or files if you declare a global header). Use pointers as parameters for values that must be passed between a smaller group of functions for sharing, and for situations in which there may be more than one variable with which you want to perform the same operations.
EDIT: Also, as a note for the future, when you say “function pointer”, people assume that you mean a pointer pointing to a function, and not passing a pointer as a parameter to a function, “Pointer as a parameter” has more meaning for what you ask here.