Esercizio sullo stack ?
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 :
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 ?
Risposte
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.