Salil's explanation is correct just adding my view point here -
As per K&R-
a[b] means *(a + b)
Therefore myarr[2] means *(myarr + 2)
and 2[myarr] is *(2 + myarr)
and we know these are equal.
This is the direct artifact of arrays behaving as pointers, "myarr" is a memory address. "myarr[2]" is the value that's 2 elements further from "myarr". The address of this element is "myarr + 5". This is equal to offset "myarr" from "2" elements.