Yes it would. If x is a pointer type, then THIS->x=0 and THIS->x=NULL will both store the bit pattern for a NULL pointer of the correct type in x, whereas memset(THIS, 0, sizeof(*THIS)) whould store a bit pattern of all zeroes in x. Only the former would compare equal to NULL/0 (!x is equivalent to x==0), because in the comparison the NULL/0 would be converted to a pointer of the correct type and only then the bit patterns compared. (See §6.5.9:5.)
| Bit pattern | THIS->x==NULL | !THIS->x | ----------------------------+-------------+---------------+----------+ THIS->x=0 | XXXXXXXX | TRUE | TRUE | THIS->x=NULL | XXXXXXXX | TRUE | TRUE | memset(THIS,0,sizeof(*THIS) | 00000000 | FALSE | FALSE |