Discussioni su argomenti di Informatica
08/08/2018, 19:27
Salve,
del seguente codice devo scrivere la stampa a video e lo sviluppo dei record di attivazione e dell'area heap.
- Codice:
int FUN1(int c, int* VET) {
int i;
for (i = 0; i < c; i++)
if (VET[i] <= c)
printf("\n PUNTO C: %d", VET[i] % 5);
else
printf("\n PUNTO D: %d", c--);
return;
}
int *FUN2(int* w, int k) {
int i;
int* z = (int*)malloc((--k)*sizeof(int));
*w = FUN1(k, w);
for (i = 0; i < k; i++)
z[i] = (*w)++;
return z;
}
main(){
int MIOVET[] = { 2, 3, 8, 1 };
int *TUOVET;
TUOVET = FUN2(&MIOVET[0], MIOVET[1]);
printf("\n MIO=%d TUO %d", MIOVET[0], TUOVET[MIOVET[3]]);
}
Sono giorni che ci sto su, ma non riesco a venirne fuori.
Per quando riguarda la funzione main, ci sono. Poi quando si entra nella funzione 1 e 2 è che mi perdo ( probabile a causa dei puntatori ). Vi chiedo pertanto se potete scrivermi passo passo i passaggi da fare.
In allegato vi allego anche la soluzione.
- Allegati
-
- selection (2).pdf
- (104.58 KiB) Scaricato 49 volte
09/08/2018, 10:01
Esegui il programma passo-passo, come se fossi il calcolatore.
Tieni presente che ogni qualvolta viene chiamata una funzione, sullo stack viene creato un cosiddetto "record di attivazione" dove ospitare l'indirizzo di ritorno al chiamante, i parametri in ingresso, le variabili locali ed eventuali valori restituiti dalla funzione stessa.
11/08/2018, 00:30
Comincio ad eseguire il main :
&MIOVET[0] = 2 (cioè il primo elemento del MIOVET)
MIOVET[1] = (cioè il secondo elemento del MIOVET )
Passo poi a *FUN2
*w = 2 ( corrisponde a &MIOVET[0] )
k = 3 (corrisponde a MIOVET[1] )
int* z=(int *)malloc((--k)*sizeof(int));
Qui viene solo decrementato il valore di k.
k=2
Poi passo a FUN1
c=2 (corrisponde al valore di k)
*VET = 2 (corrisponde al valore di *w)
Entro nel ciclo for (i<2), quindi entro nell'if(VET[i] (ossia 2) <= 2), vero
quindi stampo PUNTO C = 2 (perchè 2%5 è 2)
Rientro poi nuovamente nel ciclo for (1<2), quindi entro nell'if(VET[i] (ossia 3) <=2) falso
quindi stampo PUNTO D = 2
Dopo il printf decremento c.
Quindi c=1
Ritorno poi a *FUN2 e in particolare a
*w = FUN1 (k, w)
Fin qui ci sono arrivato grazie anche al compilatore. Ora però perchè *w diventa 1 ?
Vi chiedo inotre di controllare anche se i vari passaggi e ragionamenti sono gusti.
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.