Originariamente inviato da Istvan
Buonasera a tutti, come da topic vorrei chiedere qual è la differenza, nel linguaggio C, tra un incremento del tipo
a[i]++
e uno di tipo
a[i++]
Quest'ultimo incrementa il valore dell'indice dopo aver eseguito l'operazione, ma del primo non ne ho la minima idea.
Partiamo dall'inizio.
L'operatore ++ postfisso (ovvero, posto dopo l'operando su cui opera) incrementa l'operando di uno, ma restituisce il valore com'era prima che fosse incrementato.
Nel primo caso, l'operando è a[i]; pertanto, viene incrementato il valore che sta nell'i-esima posizione dell'array a; l'espressione complessivamente restituisce come valore il valore che stava in a[i] prima dell'incremento.
Nel secondo caso, l'operando è i; pertanto, i viene incrementato di 1, ma il valore restituito è il valore di i prima dell'incremento, per cui l'espressione a[i++] restituisce l'elemento corrispondente al valore di i prima dell'incremento.
Mi spiego meglio con un esempio:
codice:
int a[10]={0, 10, 20, 30, 40, 50, 60, 70, 80, 90};
int i=5;
printf("%d",a[i]); /* stampa 50, ossia il contenuto della cella 5 dell'array */
printf("%d",a[i++]); /* stampa ancora 50, ma intanto i è stato incrementato di 1, e vale 6 */
printf("%d",a[i]); /* infatti ora stampa 60, perché i vale 6 */
printf("%d",a[i]++); /* stampa ancora 60 (i vale 6), ma intanto il valore nella cella 6 dell'array è stato incrementato di 1 */
printf("%d",a[i]); /* infatti ora stamperà 61 */
Poi, qual è l'operazione che devo eseguire, avendo un'istruzione del tipo:
A[1]=f1(A, *p);
Non capisco cosa vuol dire che quell'indice dell'array debba diventare uguale a quei valori.
L'operando a sinistra non è l'indice dell'array, è il secondo elemento dell'array (A[1]); quell'istruzione memorizza nella posizione 1 dell'array A il valore restituito dalla funzione f1.