[c] Qual è la differenza tra ++ i e i ++?


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 .

Question

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 ?




Presumo che tu capisca la differenza nella semantica ora (anche se onestamente mi chiedo perché la gente chieda "cosa significa X operatore" domande sullo piuttosto che leggere, sai, un libro o un tutorial sul web o qualcosa del genere.

Ma comunque, per quanto riguarda l'uso, ignorate le domande sulle prestazioni, che sono improbabili anche in C ++. Questo è il principio che dovresti usare quando decidi quale usare:

Dì cosa intendi nel codice.

Se non è necessario il valore prima dell'incremento nella dichiarazione, non utilizzare tale modulo dell'operatore. È un problema minore, ma a meno che tu non stia lavorando con una guida di stile che vieta una versione a favore dell'altro (ovvero una guida di stile con le ossa), dovresti usare il modulo che esprime esattamente ciò che stai cercando di fare.

QED, usa la versione pre-incremento:

for (int i = 0; i != X; ++i) ...



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




++ i è pre-incrementare l'altro è post-incremento

i ++: ottiene l'elemento e quindi lo incrementa.
++ i: incrementa i e restituisce l'elemento

Esempio:

int i = 0;
printf("i: %d\n", i);
printf("i++: %d\n", i++);
printf("++i: %d\n", ++i);

Produzione:

i: 0
i++: 0
++i: 2



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'aumento 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



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 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.




a = i ++ significa che contiene valore corrente i a = ++ i significa a contiene valore i incrementato




Related