Recall that if a program is deemed by the standard to have undefined behaviour, then the standard imposes no requirements at all on how an implementation can treat that program. When we ask whether an idiom is free of undefined behaviour with respect to some implementation (e.g. GCC or Clang), the question is really whether that implementation assumes (for optimisation) that legal programs do not use that idiom and so may give surprising results for any programs that do. Say a `usable pointer' is one that can be written to or read from without causing undefined behaviour.
For the questions about the standard, we're most interested in what you believe it says. If you're familiar with the standard and able to justify your answers with reference to it, that would also be interesting, but it's not necessary.
We illustrate each question with an example program. We've made these as simple as possible, but to see interesting implementation behaviour one might need more complex examples, with a bigger context, to give analysis and optimisation passes something to work on. Please bear that in mind when answering the questions, rather than focussing exclusively on how the code as written would be compiled.