Вы можете использовать запятую чаще всего в любом месте, где может появиться выражение.Есть несколько исключений;в частности, вы не можете использовать оператор запятой в константном выражении.
Вы также должны быть осторожны при использовании оператора запятой, где запятая также используется в качестве разделителя, например, при вызове функций необходимо использовать скобкисгруппировать выражение запятой:
void f(int, bool);
f(42, 32, true); // wrong
f((42, 32), true); // right (if such a thing can be considered "right")
Ваш пример - это объявление:
int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
В объявлении вы можете объявить несколько вещей, разделив их запятой, поэтому и здесьзапятая используется в качестве разделителя.Кроме того, вы не можете просто прикрепить выражение к концу объявления, как это.(Обратите внимание, что вы можете получить желаемый результат, используя int arr[3] = { 1, 2, 3 };
).