top | item 2436101

C's index[arr] notation

5 points| leegao | 15 years ago

I had always assumed that it was merely some strange artifact of the language, until I finally thought about it, and then finally understood:

arr[index] is equivalent to (arr + index), which by the commutative property of addition is equivalent to (index + arr) = index[arr].

Mind = blown

4 comments

order

marcomonteiro|15 years ago

It's not the same as (index + arr). arr is a pointer to the beginning address of a series of particular "types". These types have a specific size in memory. Index increments the pointer by (n * size_of(type)).

arr[index] == arr + (n * size_of(type)) == (n * size_of(type)) + *arr

SamReidHughes|15 years ago

He said it's the same as

    *(index + arr)
which is correct.

C pointer arithmetic already accounts for object sizes.

And it's sizeof, not size_of. And

    arr + x
is completely different from

    x + *arr
And it's a series of "values".