>>struct elemento *aggiungi proiezione(struct elemento *p);
>>//che senso ha questa dicitura??????
struct elemento *aggiungi proiezione (struct elemento *p);
aggiungi_proiezione e' il nome della funzione (che non e' formata da due parole distinte ... lo spazio tra le due parole non c'e' oppure c'e' un underscore).
Questa funzione accetta un parametro p di tipo "puntatore a struttura di tipo elemento"
struct elemento *aggiungi proiezione(struct elemento *p );
e restituisce un valore di tipo "puntatore a struttura di tipo elemento"
struct elemento * aggiungi proiezione(struct elemento *p);
Per il secondo problema, quella dichiarazione indica che il parametro accettato dalla funzione e' un puntatore ad intero (int *) passato per riferimento (&) .
Quindi
int*& x
significa che x e' un puntatore ad intero passato per riferimento.