andie :oh_no_bubble:<p>TIL: C array subscript operators are handled in such a way that `letters[i]` is equivalent to `*(letters + i)` and because addition is commutative, that expression is identical to `*(i + letters)`, which means that `i[letters]` is the same as `letters[i]`.</p><p>```<br><a href="https://tech.lgbt/tags/include" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>include</span></a> <stdio.h><br><a href="https://tech.lgbt/tags/include" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>include</span></a> <stddef.h></p><p>int main() {<br> char letters[3] = "abc";<br> size_t i = 2;<br> printf("letters: %p\n", (void *)&letters);<br> printf("i[letters] (%p): %c\n", (void*)&(i[letters]), i[letters]);<br> printf("letters[i] (%p): %c\n", (void*)&(letters[i]), letters[i]);<br> return 0;<br>}<br>```</p><p>Which outputs:<br>```<br>letters: 0x7ffc68ec7bb9<br>i[letters] (0x7ffc68ec7bbb): c<br>letters[i] (0x7ffc68ec7bbb): c<br>```</p><p>Mind blown... :neofox_floof_explode: <br><a href="https://tech.lgbt/tags/til" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>til</span></a> <a href="https://tech.lgbt/tags/clang" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>clang</span></a> <a href="https://tech.lgbt/tags/pointers" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>pointers</span></a> <a href="https://tech.lgbt/tags/programming" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>programming</span></a></p>