A aritmética de ponteiro ainda funciona fora da matriz?
Eu estou sempre lendo que a aritmética de ponteiro é definida desde que você não deixe os limites da matriz. Não tenho certeza se entendi completamente o que isso significa e fiquei um pouco preocupado. Daí esta questão.
Suponha que eu comece com um ponteiro para o começo de um array:
int *p = (int*) malloc(4 * sizeof(int));
Agora eu crio dois novos ponteiros que estão fora dos limites da matriz:
int *q = p + 10;
int *r = p - 2;
Agora os ponteirosq-10
, q-9
...r+2
, r+3
e assim por diante todos estão dentro dos limites da matriz. Eles são válidos? Por exemplo, ér[3]
garantido para dar o mesmo resultadop[1]
?
Eu fiz alguns testes e funciona. Mas eu quero saber se isso é coberto pelas especificações C habituais. Especificamente, estou usando o Visual Studio 2010, o Windows e estou programando em C nativo (não em C ++). Eu estou coberto?