Dubbio linguaggio C

Messaggioda del_ta » 22/08/2018, 18:23

Ciao a tutti. Sto studiando alcuni esercizi sul linguaggio C ma non riesco a capire una cosa. Questo è il programma:
#include <stdio.h>
#include <stdlib.h>
int leggi(int vet[], int dim) {
int i, num;
i=0;
do {
printf("Inserisci numero: ");
scanf("%d", &num);
if (num != 0) {
vet[i] = num;
i++;
}
} while (num!=0 && i<dim);
return i;
}
int trovaPos(int vet[], int dim, int el) {
int trovato, i;
trovato = -1;
for (i=0; i<dim && trovato<0; i++) {
if (vet[i] == el)
trovato = i;
}
return trovato;
}
int main(void)
{
int v[10], dim, i;
dim = leggi(v, 10);
for (i=0; i<dim; i++)
if ( trovaPos(&v[i+1], dim-i-1, v[i]) >= 0 )
if ( trovaPos(v, i, v[i]) < 0)
printf("%d ", v[i]);
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[i] == 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.
del_ta
Junior Member
Junior Member
 
Messaggio: 111 di 242
Iscritto il: 01/12/2015, 11:50

Re: Dubbio linguaggio C

Messaggioda vict85 » 23/08/2018, 08:05

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
Moderatore
Moderatore
 
Messaggio: 9367 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Dubbio linguaggio C

Messaggioda del_ta » 03/09/2018, 17:05

vict85 ha scritto: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! :-D
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.
del_ta
Junior Member
Junior Member
 
Messaggio: 112 di 242
Iscritto il: 01/12/2015, 11:50


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite