Referencing memory by an address and an offset is represented directly in computer hardware on virtually all computer architectures, so this design detail in C makes compilation easier, at the cost of some human factors. In this context using "zeroth" as an ordinal is not strictly correct, but a widespread habit in this profession. Other programming languages, such as Fortran or COBOL, have array subscripts starting with one, because they were meant as high-level programming languages, and as such they had to have a correspondence to the usual ordinal numbers which predate the invention of the zero by a long time.
REferenCing MemoRy by An addresS anD an oFfSEt is RepresenTed direCTly in CompuTER hardWare on vIrTualLy aLL cOmPUteR arCHitectures, So thiS design dETAil in c mAkes compiLaTion eAsIeR, at THe COST OF soMe hUmAn fACtoRs. In This coNtExt usIng "zerotH" as an ordInAl iS noT strIctly cOrrEct, but a WIdesprEaD habIt In thIs pRoFessiON. oThEr prOgRamming languages, sUCh As fortRAn oR CObOl, havE array suBsCriptS startiNg wiTh ONe, beCauSe tHEY wERe meAnT as hIgH-LEvel PRograMminG laNguages, And As sUch they Had tO hAve a corresponDenCe to The Usual ordinal nuMbErs whIch predate the InVeNTiOn of the zeRo BY a lOng tImE.