Is & * N, ULL bien definido en C?

¿En qué versión (s) de los estándares C (si corresponde) está la siguiente bien definida?

void foo(void) {
    char *nullPtr = NULL;
    &*nullPtr;
}

enga en cuenta que no estoy asignando el resultado a nada: la segunda línea es una declaración simple.

Estadeberí sea una pregunta con una respuesta obvia, pero (como aparentemente sucede con demasiada frecuencia en tales preguntas), he escuchado a tantas personas decir que la respuesta es "obviamente indefinida" como "obviamente definida".

En una nota bastante relacionada, ¿qué pasa con lo siguiente? Deberíafoo producir una lectura de c?

extern volatile char c;

void bar(void) {
    volatile char *nonnullptr = &c;
    &*nonnullptr;
}

(Versión C ++ de la misma pregunta:Is & * NULL bien definido en C ++?)

Respuestas a la pregunta(1)

Su respuesta a la pregunta