Всё очень просто.
В С++ в функцию передается не сам массив, а его адрес (точнее адрес его первого элемента). По этой причине Вы можете в аргументах функции передать или адрес его первого элемента, или имя массива, преобразованное к указателю (int *). Если не сделать преобразование типа, то компилятор даст ошибку. А вот в самой функции с массивом можно работать как угодно, считая его хоть одномерным, хоть многомерным, хоть с плавающей точкой (float) - компилятор ошибку не даст.