---
I'm a bit rusty on the C spec, but I think the author is wrong about #4.
The answer refers to an exception for a pointer that points one past the end of an array.
And &a[5] would be valid based on that rule, because it points one past the end of the array a.
However (&a + 1) is not valid. It does not point one past the end of an array (because although a is an array, it is not an element of an array.)
Having said that I would be surprised if any compiler gave a result other than "2 5". Still, it's technically undefined.
For the purposes of these operators, a pointer to an object that is not an element of an array behaves the same as a pointer to the first element of an array of length one with the type of the object as its element type.
---
I'm a bit rusty on the C spec, but I think the author is wrong about #4.
The answer refers to an exception for a pointer that points one past the end of an array.
And &a[5] would be valid based on that rule, because it points one past the end of the array a.
However (&a + 1) is not valid. It does not point one past the end of an array (because although a is an array, it is not an element of an array.)
Having said that I would be surprised if any compiler gave a result other than "2 5". Still, it's technically undefined.