В C все передается по значению. Есть еще одно правило, которое гласит, что в большинстве случаев имя массива эквивалентно указателю на его первый элемент. Передача массива в функцию является таким контекстом.
Таким образом, особый случай не в том, что массивы передаются по ссылке, особый случай - это правило о массивах, распадающихся на указатели Это создает впечатление, что массив передается по ссылке (что он и есть на самом деле, но теперь вы знаете, почему!)
Пост в моей ссылке выше объясняет более подробно о типе массива в разных контекстах.