Array Basics (sizeof)

n isn't known at compile time, only the sizeof int. Also its stored on the stack.

Yup, thats what I was showing.

Yup, thats exactly what I've pointed out. int*arr is not the array and never will be, it only holds the address of the first element.
I showed clearly above how to pass a pointer to an array and get the correct size using sizeof.

void Foo( arr_t *arrp ){
  
  Serial.println( sizeof( *arrp ) / sizeof( **arrp ) );
}