Pode-se obter um ponteiro para um elemento completo de representação de objeto de um ponteiro para um subojeto?

Vamos considerar este código:

int i;
int is[10]{};

unsigned char * p = reinterpret_cast<unsigned char*>(&i);
//p defined to point to the object-representation of the first element of array ints
unsigned char * ps = reinterpret_cast<unsigned char*>(&is[0]);

p += sizeof(int);
ps += sizeof(int);
//now ps points to the end of ints[0] and p point to the end of i;

p += sizeof(int); //Undefined behavior according to [expr.add]

ps += sizeof(int); //Undefined behavior?
unsigned char c = *ps;//Undefined behavior?

Se considerarmos issops aponta para orepresentação de objeto dois[0] então, de acordo com a regra aritmética do ponteiro, o comportamento é indefinido nas duas últimas linhas de código.

No entanto, seps também é um ponteiro para orepresentação de objeto da matriz de intis o comportamento é definido.

Então, minha pergunta é: faz um ponteiro para orepresentação de objeto de umsubojeto também é um ponteiro para um elemento dorepresentação de objeto do objeto completo que contém?

questionAnswers(2)

yourAnswerToTheQuestion