When you declare a structure like this with an char*, it can't be mapped over a memory buffer containing raw data without warnings and casts.  However, a char array of length 0 can be mapped w/o warning or error (think of it as a union with a byte array where the byte array is of variable length).  It's a common pattern in IP stacks where the headers are laid out as structs (like this) and cast to the head of the byte array of incoming data...