The leading '_' indicates it's a system level macro, i. e. Windows specific.
GOTOs are a bit like wire coat hangers: they tend to breed in the darkness, such that where there once were few, eventually there are many, and the program's architecture collapses beneath them. (Fran Poretto)
Under C any pointer is already a pointer to an array it's built into the language along with pointer arithmetic ... you need to just learn that.
Literally declare any pointer of anything lets do a float
now you can access it as an array
p = 5.0;
p = 10.0;
It will crash because the pointer isn't really to any memory but it makes the point the pointer is already a pointer to an array
There are no exceptions to the rule it doesn't matter if the pointer is to a fundamental type or struct .... so I don't get how you could ever forget that. In the C community the  use is rare because it's two extra characters to type. It also has implication when declaring variables because it puts that array on the stack not on data memory or constant memory (rodata) if it determines its a constant. So if you get into the habit of using that form you can get some undesirable things happen.
Personally you are learning and I would learn to live without it and just learn them as you will most often see them written.
I use brackets to indicate that the underlying is an array, not a pointer to a single char. Maybe it's because I was a latecomer to C++ and never used C idioms, another one being if(p), for which I write if(p != nullptr).
That is interesting. It should really crash at the test(*pi); line, since it is trying to dereference a null pointer. I would also suggest the the compiler should recognise that pi is a pointer and not a reference.
f you want to pass a single int, char etc, then why use a pointer?
On occasion you want an "out" or sentinel parameter, so in those cases you have to use a pointer (or a reference if using C++).
There's lots of cases where you might have a pointer to a single struct that you either want to fill in, or avoid copying the whole thing to the stack. For the latter, of course, you'd mark it as const.