Dubbio linguaggio C
Ciao a tutti. Sto studiando alcuni esercizi sul linguaggio C ma non riesco a capire una cosa. Questo è il programma:
#include
#include
int leggi(int vet[], int dim) {
int i, num;
i=0;
do {
printf("Inserisci numero: ");
scanf("%d", &num);
if (num != 0) {
vet = num;
i++;
}
} while (num!=0 && i
return i;
}
int trovaPos(int vet[], int dim, int el) {
int trovato, i;
trovato = -1;
for (i=0; i
if (vet == el)
trovato = i;
}
return trovato;
}
int main(void)
{
int v[10], dim, i;
dim = leggi(v, 10);
for (i=0; i
if ( trovaPos(&v[i+1], dim-i-1, v) >= 0 )
if ( trovaPos(v, i, v) < 0)
printf("%d ", v);
system("PAUSE");
return (0);
}
Il mio dubbio riguarda la parte in grassetto. Perchè si deve usare &v[i+1] invece che v[i+1]?
Ho pensato che usando la & si va a considerare l'indirizzo della cella dell'array e non il suo contenuto, e quindi quando si va ad eguagliare (vet == el) vado a confrontare un valore dell'array con un indirizzo no? Ho provato ad eseguire il programma ed effettivamente funziona con la & mentre non funziona senza. Perchè il mio ragionamento è sbagliato?
Grazie.
#include
#include
int leggi(int vet[], int dim) {
int i, num;
i=0;
do {
printf("Inserisci numero: ");
scanf("%d", &num);
if (num != 0) {
vet = num;
i++;
}
} while (num!=0 && i
}
int trovaPos(int vet[], int dim, int el) {
int trovato, i;
trovato = -1;
for (i=0; i
trovato = i;
}
return trovato;
}
int main(void)
{
int v[10], dim, i;
dim = leggi(v, 10);
for (i=0; i
if ( trovaPos(v, i, v) < 0)
printf("%d ", v);
system("PAUSE");
return (0);
}
Il mio dubbio riguarda la parte in grassetto. Perchè si deve usare &v[i+1] invece che v[i+1]?
Ho pensato che usando la & si va a considerare l'indirizzo della cella dell'array e non il suo contenuto, e quindi quando si va ad eguagliare (vet == el) vado a confrontare un valore dell'array con un indirizzo no? Ho provato ad eseguire il programma ed effettivamente funziona con la & mentre non funziona senza. Perchè il mio ragionamento è sbagliato?
Grazie.
Risposte
Quando passi un array ad una funzione in C, in realtà stai passando un puntatore al primo elemento. Quindi con quel codice passi l'array dalla posizione i+1 in poi. Nota che la funzione non sa che l'array che gli hai passato è parte di un array più grande.
"vict85":
Quando passi un array ad una funzione in C, in realtà stai passando un puntatore al primo elemento. Quindi con quel codice passi l'array dalla posizione i+1 in poi. Nota che la funzione non sa che l'array che gli hai passato è parte di un array più grande.
Grazie mille!

Sapresti aiutarmi anche con questo esercizio?
Si scriva una procedura ricorsiva void list_indici_dispari(int X[], int n); che
stampi il contenuto del vettore X corrispondentemente agli indici dispari. Si facciano due versioni
della procedura: uno che stampa gli elementi in ordine di inserimento del vettore (dall’indice più
piccolo all’indice più grande) e l’altra viceversa. Si discuta anche se le procedure così definite sono o
meno tail ricorsive.