c - Qual è la differenza tra ++ i e i ++?




10 Answers

I ++ è noto come Incremento Post mentre ++ i è chiamato Pre Incremento.

i++

i++ è post incremento perché incrementa il valore di i di 1 dopo che l'operazione è terminata.

Vediamo il seguente esempio:

int i = 1, j;
j = i++;

Qui valore di j = 1 ma i = 2 . Qui il valore di i verrà assegnato a j prima, quindi verrà incrementato.

++i

++i è preincremento perché incrementa il valore di i di 1 prima dell'operazione. Significa j = i; verrà eseguito dopo i++ .

Vediamo il seguente esempio:

int i = 1, j;
j = ++i;

Qui valore di j = 2 ma i = 2 . Qui il valore di i verrà assegnato a j dopo l'incremento di i . Analogamente, ++i sarò eseguito prima di j=i; .

Per la tua domanda che dovrebbe essere utilizzata nel blocco di incremento di un ciclo for? la risposta è, puoi usare qualsiasi .. non importa. Eseguirà il tuo ciclo per lo stesso n. di volte.

for(i=0; i<5; i++)
   printf("%d ",i);

E

for(i=0; i<5; ++i)
   printf("%d ",i);

Entrambi i loop produrranno lo stesso risultato. cioè 0 1 2 3 4 .

Importa solo dove lo stai usando.

for(i = 0; i<5;)
    printf("%d ",++i);

In questo caso l'output sarà 1 2 3 4 5 .

c for-loop post-increment pre-increment

In C, qual è la differenza tra l'uso di ++i e i++ e quale dovrebbe essere usato nel blocco di incremento di un ciclo for ?




++i incrementa il valore, quindi lo restituisce.

i++ restituisce il valore e quindi lo incrementa.

È una sottile differenza.

Per un ciclo for, usa ++i , poiché è leggermente più veloce. i++ creerà una copia in più che viene semplicemente gettata via.




La ragione per cui ++i può essere leggermente più veloce di i++ è che i++ può richiedere una copia locale del valore di i prima che venga incrementato, mentre ++i non lo fa mai. In alcuni casi, alcuni compilatori la ottimizzeranno, se possibile ... ma non è sempre possibile, e non tutti i compilatori lo fanno.

Cerco di non fidarmi troppo delle ottimizzazioni dei compilatori, quindi seguirò il consiglio di Ryan Fox: quando posso usare entrambi, uso ++i .




Entrambi incrementano il numero. ++ i è equivalente a i = i + 1.

i ++ e ++ i sono molto simili ma non esattamente uguali. Entrambi incrementano il numero, ma ++ i incrementa il numero prima che l'espressione corrente venga valutata, mentre i ++ incrementa il numero dopo la valutazione dell'espressione.

Esempio :

int i = 1;
int x = i++; //x is 1, i is 2
int y = ++i; //y is 3, i is 3



++ i (operazione prefisso): incrementa e quindi assegna il valore
(es.): int i = 5, int b = ++ i
In questo caso, 6 viene assegnato prima a b, quindi incrementa a 7 e così via.

i ++ (operazione Postfix): assegna e quindi incrementa il valore
(es.): int i = 5, int b = i ++
In questo caso, 5 viene assegnato prima a b, quindi incrementa a 6 e così via.

Incase of for loop: i ++ è usato principalmente perché, normalmente, usiamo il valore iniziale di i prima di incrementare il ciclo. Ma a seconda della logica del programma può variare.




La differenza può essere compresa da questo semplice codice C ++ sotto:

int i, j, k, l;
i = 1; //initialize int i with 1
j = i+1; //add 1 with i and set that as the value of j. i is still 1
k = i++; //k gets the current value of i, after that i is incremented. So here i is 2, but k is 1
l = ++i; // i is incremented first and then returned. So the value of i is 3 and so does l.
cout << i << ' ' << j << ' ' << k << ' '<< l << endl;
return 0;



In breve: ++ i e i ++ funzionano allo stesso modo se non li si sta scrivendo in una funzione. Se usi qualcosa come funzione (i ++) o funzione (++ i) puoi vedere la differenza.

function (++ i) dice prima incrementa i per 1, dopodiché metti questo i nella funzione con un nuovo valore.

function (i ++) dice di inserire prima i nella funzione dopo quell'incremento i di 1.

int i=4;
printf("%d\n",pow(++i,2));//it prints 25 and i is 5 now
i=4;
printf("%d",pow(i++,2));//it prints 16 i is 5 now



Il seguente frammento di codice C illustra la differenza tra gli operatori di pre e post decremento:

int i; int j;

// Incrementa gli operatori

i = 1;

j = ++ i; // i è ora 2, j è anche 2

j = i ++; // I è ora 3, j è 2




Puoi pensare alla conversione interna di quella come una dichiarazione multipla ;

// case 1 :

i++;

/* you can think as,
 * i;
 * i= i+1;
 */

// case 2

++i;

/* you can think as,
 * i = i+i;
 * i;
 */



Ecco l'esempio per capire la differenza

int i=10;
printf("%d %d",i++,++i);

output: 10 12/11 11 (in base all'ordine di valutazione degli argomenti della funzione printf , che varia tra compilatori e architetture)

Spiegazione: i++ -> i viene stampato, quindi incrementa. (Stampa 10, ma diventerò 11) ++i -> i valore incrementi e stampa il valore. (Stampa 12 e il valore di i anche 12)




Related