#include <stdio.h>
int
main()
{
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int i = 3;
printf("%d\n", i[arr]);
return 0;
}
If you index an integer with an array in C, it gives you the same result as when you index an array with an integer. This is because array indexing is equivalent to pointer arithmetic. i’th member of arr equals to arr plus i equals to i plus arr equals to arr’th member of i.


How is that not a bug in the compiler’s type checking? If the code had been
i[0]instead, it would have (correctly) given asubscripted value is neither array nor pointer nor vectorerror. IMO it should have still done that no matter if the thing inside the subscript was an array, because the type that matters to decide if the subscript operator is even valid to use in the first place is the type of the token to the left of it, not the token inside it!Subscript operator (in C) is just syntac sugar. i[0] fails because you’re dereferencing an integer not because the operator isn’t defined. (also, arrays are just pointers)
In other words: a[b] is just sy tax sugar for *(a+b)