Because C is ridiculous with how it does pointer definitions.
#define macros are merely text substitution. So in your second case...
1 2 3 4 5 6 7 8 9 10 11
// this:
intptrdef pZ, pW;
// gets replaced with this:
int* pZ, pW;
// which, because C is ridiculous with how it does pointer definitions is closer to this:
int *pZ, pW;
// whereas if you wanted both of them to be pointers, you'd do this:
int *pZ, *pW;