Preguntas de puntero restringidas

Estoy un poco confundido acerca de las reglas sobre punteros restringidos. Quizás alguien por ahí pueda ayudarme.

¿Es legal definir punteros restringidos anidados de la siguiente manera:

int* restrict a;
int* restrict b;


a = malloc(sizeof(int));


// b = a; <-- assignment here is illegal, needs to happen in child block
// *b = rand();


while(1)
{
    b = a;  // Is this legal?  Assuming 'b' is not modified outside the while() block
    *b = rand();
}

¿Es legal derivar un valor de puntero restringido de la siguiente manera:

int* restrict c;
int* restrict d;


c = malloc(sizeof(int*)*101);
d = c;


for(int i = 0; i < 100; i++)
{
    *d = i;
    d++;
}


c = d; // c is now set to the 101 element, is this legal assuming d isn't accessed?
*c = rand();

¡Gracias! Andrés

Respuestas a la pregunta(2)

Su respuesta a la pregunta