I am always reading that pointer arithmetic is defined as long as you don\'t leave the bounds of the array. I am not sure I completely understand what this means and I was a
"Yes" the conditions you mentioned are covered in specifications.
int *r = p - 2;
r is outside bounds of array p, the evaluation results in allocation of position to r, 2 int positions behind/before the address of p.
`r[3]` is simply the "4th" int position after the address of r