Skip to content

C's index[arr] notation

5 pointsleegao4 comments
On HN

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

Comments

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

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".

I don't know what I was on. Proof positive that sleep depravation does not give me more time to be "productive". Thanks for the correction and apologies for my mistake.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.