the name of an array is converted to a pointer in c++ for you, its the same as &arr[0] to say arr.
if you had f(arr, &arr) those are int* and int** respectively. There is NO reason to use int ** here. that is useful if it were dynamic memory and not an array, if you wanted to change the pointer, but for that, a reference is better than a double pointer which is convoluted.
it is a little risky to do that. to some, the words "a pointer to array" may imply a single pointer to the first location, if used casually without some context. Its not wrong but its easy for someone to not see what you meant here. If its in context with the code they will get it.
if you had f(arr, &arr) those are int* and int** respectively
I'm not sure why jonin says &arr would pass an int**.
It would pass an int (*)[5].
So passing in that way retains the size information.
Similarly you could receive it as a reference to retain the size info.