На самом деле, когда вы передаете массив внутри функции, указатель на исходный массив передается в параметре функции и, таким образом, изменения, сделанные в массиве внутри этой функции, фактически вносятся в исходный массив.
#include <iostream>
using namespace std;
int* func(int ar[])
{
for(int i=0;i<100;i++)
ar[i]=i;
int *ptr=ar;
return ptr;
}
int main() {
int *p;
int y[100]={0};
p=func(y);
for(int i=0;i<100;i++)
cout<<i<<" : "<<y[i]<<'\n';
}
Запустите его, и вы увидите изменения