This kind of approach makes your design non modular. It prevent you from reusing your code in another project, or a different part of the same project. You have to link the entire project to use a single function. Or that function, despite preforming a generic operation, cannot be used, because it hard codes the data.
Plus all the globals are at the top with the function prototypes! True, without searching for the variable, you wouldn't be able to connect it with a particular function. But everything is fine with the compiler anyway.
This is a positive because it allows generic reusable function. So instead of having a function called addPoints(), that sums up a particular array of scores, you can write a generic function called addList() that sums all the elements in any list. This makes for reusable, modular code.
On the other hand, a pointer doesn't have to have the same name all the time, so it's bound to change.