It is not declaring the size of the pointer, but rather what type the pointer points to.
uint8_t *testCount_p = &testCount;
I still think it's a problem. (but I'm quite rusty!)
Not at all, this is completely correct.
uint8_t * = a pointer to a value that contains a uint8_t value. The pointer size is determined by the architecture and the compiler knows it.
&testCount = the address of testCount.
The fact that it works under GNU C just fine shows that it is not a code issue, this is standard C stuff, the issue is with the build/compiler or debugger. It could be that the init code is doing things wrong.
@danadak, try using incrCount(&testCount) instead, if this works correctly it is clear that the init code isn't initializing the variable properly before main is called.