Non ho ben capito se vuoi passare delle strutture (e quindi il consiglio dei puntatori è quello più efficente perchè eviti copie inutile delle strutture, a meno di non usare il C++ ed i reference) oppure vuoi passare una matrice di valori e quindi un array (e quindi torniamo ai puntatori perchè in C quello che puoi passare è solo il puntatore al primo elemento).
Faccio qualche esempio.
Supponiamo la struttura (uso il C++ che preferisco perchè lo uso di più):
codice:
struct pinco
{
int campo1;
int campo2;
pinco() : campo1(0), campo2(0) {}
};
Posso fare così:
codice:
void f(pinco p)
{
p.campo1 = 10;
p.campo2 = 10;
}
...
pinco c;
f(c);
ma quando esco da f in effetti ho fatto le modifiche ad una copia locale.
Altrimenti:
codice:
void f(pinco *p)
{
p->campo1 = 10;
p->campo2 = 10;
}
...
pinco c;
f(&c);
qua all'uscita di f ho fatto la modifica direttamente a c.
Quello che preferisco.
codice:
void f(pinco &p)
{
p.campo1 = 10;
p.campo2 = 10;
}
...
pinco c;
f(c);
lo stesso del caso dei puntatori.
Se invece vuoi una matrice, avresti:
per passarla ad una funzione F l'unica cosa che puoi fare è:
codice:
void F(int *p)
{
p[0] = 10;
p[1] = 10;
p[2] = 10;
...
}
ovviamente attento ai limiti dell'array.
L'uso del typedef direi che ha senso in C (non ANSI) per evitare di dovere scrivere struct
pippo ogni volta che definisci una variabile/parametro di quel tipo; insomma per dare un nome diverso ad una struttura e poter eliminare il suffisso struct (insomma definire in effetti un nuovo tipo).
Spero di non aver detto qualcosa di sbagliato perchè ormai molte cose le faccio in automatico e non ci penso più (tanto è il compilatore che mi avvisa degli errori
).
Ciao e spero di esserti stato di aiuto e di non aver complicato le cose.