Как писать нормально: for (int i = 0; ...) or for (int i = NULL; ...)?
NULL - служебный дефайн, который есть, в частности, в венде.

Общей практикой является int i = 0; Хотя бы потому, что так короче.

Проблема в другом. В int.
В большинстве языков, int - это 32 бита со знаком, то есть, два гигабайта. В современных же системах памяти - десятки-сотни-тысячи гигабайт, а программы обрабатывают разного рода бигдату и ML. Так что индексация массива интами может легко выйти трудноуловимыми багами.

Поэтому правильно писать for(size_t i = 0; ..
int i = 0
NULL применяют к указателям. Более того, NULL - это макрос ОС Windows. К языку C++ это никак не относится.
В C++ для указателей используется nullptr.