Basically you have no guarantee where the pointer q is pointing to.
Some compiler/static code analyzer will yell at you with this code.
Whether something useful is behind that address is another question
> If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
So although most implementations might produce an address that's relative to b, that's not actually guaranteed by the spec unless it's `&b + 1`.