Esercizio sullo stack ?

vincenzoj

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
apatriarca
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
Per rispondere a questa discussione devi prima effettuare il login.