The array who's base address (pointer to first element) p
is assigned is of type int[2]
. This means the address in p
can legally be dereferenced only at locations *p
and *(p+1)
, or if you prefer subscript notation, p[0]
and p[1]
. Furthermore, p+2
is guaranteed to be a legally evaluated as an address, and comparable to other addresses in that sequence, but can not be dereferenced. This is the one-past address.
The code you posted violates the one-past rule by dereferencing p
once it passes the last element in the array in which it is homed. That the array in which it is homed is buttressed up against another array of similar dimension is not relevant to the formal definition cited.
That said, in practice it works, but as is often said. observed behavior is not, and should never be considered, defined behavior. Just because it works doesn't make it right.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…