Esercizio sullo stack ?

Messaggioda simonerusso64 » 25/08/2018, 21:15

Codice:

int *F1(int A, int *B){
   int i;
   int *C = (int *)malloc((A)*sizeof(int));
   int k = F2(B, A);
   for (i = 0; i < A; i++)
      if (!(i % 2))
         printf("\n C[%d]=%d", i, C[i] = k + (*B)++);
      else
         printf("\n C[%d]=%d", i, C[i] = k - *(B++));
   return C;
}

int F2(int *A, int B){
   int i;
   for (i = 0; i < B; i++)
      if ((A[i]>B))
         A[i]++;
   return ++(A[--i]);
}

main(){
   int *VD = NULL;
   int VS[4] = { 2, 3, 4, 1 };
   VD = F1(*VS, VS + 2);
   printf("\n A: %d B: %d", *VS, VD[*VS % 2]);
}



In questo codice prima di eseguire la seguente istruzione :
Codice:
printf("\n C[%d]=%d", i, C[i] = k - *(B++));

ho i seguenti valori :
*B=6
k=2
C[0]=7
A=2

Ora perchè eseguendo questa istruzione B diventa 2 ?
simonerusso64
Junior Member
Junior Member
 
Messaggio: 80 di 212
Iscritto il: 30/10/2017, 22:44

Re: Esercizio sullo stack ?

Messaggioda apatriarca » 26/08/2018, 23:13

Stai incrementando il valore del puntatore. Per cui il puntatore B punta ad un valore uguale a 2. Tuttavia è puramente casuale, chiamate diverse della funzione potrebbero portare a valori completamente diversi.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5082 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite