Strictly speaking, the answer is that the behavior is undefined.
&a is the address of the array. Adding 1 to the address (pointer value) advances it in the size of the type it points to. But pointer arithmetic is valid only when the result points to an element of the same array as the original pointer, or only beyond its end. (For the purpose of pointer arithmetic, one object is considered an array of one element.)
If you assume a certain model of "good behavior" with one linear monolithic address space and addresses reasonably related to integers, then, given your assumptions ( &a is 100, sizeof (int) == 4 ), then yes, the result is &a + 4 will be 420 . More precisely, since 420 is an integer, not a pointer, it will be (int(*)[10])420 - again, assuming that conversions between pointers and integers behave especially well.
source share