WinAPIなんかだと、NULLを渡すとsizeだけ返すのがあるから、
その方式でいけば、

#define NULL 0
int main(void)
{
int *array_data, number;

func(NULL,&number);
array = (int*)malloc(number*sizeof(int));
func(array_data, &number);
(array_dataを表示する処理など...)
free(array);
return 0;
}

void func(int *array, int *number)
{
int data[50], data_number, i;
(50個以下で入力したデータをdataに格納する処理など...)
//data_numberはdataに格納されてるデータの個数です
if(array !=NULL)
for(i = 0, i < data_number; i++) array[i] = data[i];
*number = data_number;
}