Even 30 years after being introduced to C, I still occasionally trip over the abomination known as zero-based numbering (re. arrays). It's a logical-physical confusion based upon memory offsets, which leads to stating, "the first item is the zeroth item.", which sounds entirely nonsensical even when you know it means, "the first item is at the zeroth offset from the memory location referenced."
The compiler is supposed to hide such things from us humans.