Il puntatore puoi restituirlo, anche se non serve (potresti pure avere void nel prototipo) perché l'array viene modificato direttamente se lo vai a scrivere.
#include <stdio.h>
typedef struct Rect
{
double x;
double y;
double w;
double h;
} Rect;
Rect * inserisci (Rect A[])
{
A[0].x = 1.0;
A[0].y = 2.0;
A[0].w = 3.0;
A[0].h = 4.0;
return A;
}
int main()
{
Rect ARR[5];
Rect * PTR = inserisci(ARR);
printf("%f %f %f %f\n", ARR[0].x, ARR[0].y, ARR[0].w, ARR[0].h);
printf("%f %f %f %f\n", PTR[0].x, PTR[0].y, PTR[0].w, PTR[0].h);
return 0;
}
Se l'array ti serve solo in lettura puoi mettere, ad esempio, void inserisci (const Rect A[]) se vuoi essere sicuro di non toccare l'array originale
Solitamente restituire i puntatori ti serve con gli array dinamici
#include <stdio.h>
#include <stdlib.h>
typedef struct Rect
{
double x;
double y;
double w;
double h;
} Rect;
Rect * inserisci ()
{
Rect * A = (Rect *)malloc(5 * sizeof(Rect));
A[0].x = 1.0;
A[0].y = 2.0;
A[0].w = 3.0;
A[0].h = 4.0;
return A;
}
int main()
{
Rect * PTR = inserisci();
printf("%f %f %f %f\n", PTR[0].x, PTR[0].y, PTR[0].w, PTR[0].h);
return 0;
}