int i = 0 NULL применяют к указателям. Более того, NULL - это макрос ОС Windows. К языку C++ это никак не относится.
В C++ для указателей используется nullptr.
Если внезапно использовать что то редкое и не следующее стандарту, то можно наткнутся что NULL не равен нулю.
Но вообще в int как бе принято ложить число. То что NULL - дефайн за которым скрывается число - не отменяет того что он в первую очередь указатель. И для простоты чтения надо класть в переменную то что в ней логически должно быть.
NULL - служебный дефайн, который есть, в частности, в венде.
Общей практикой является int i = 0; Хотя бы потому, что так короче.
Проблема в другом. В int.
В большинстве языков, int - это 32 бита со знаком, то есть, два гигабайта. В современных же системах памяти - десятки-сотни-тысячи гигабайт, а программы обрабатывают разного рода бигдату и ML. Так что индексация массива интами может легко выйти трудноуловимыми багами.