Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Esercizio sullo stack ?

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 ?

Re: Esercizio sullo stack ?

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.
Rispondi al messaggio


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.