i++ vs ++i en C
-
Principales diferencias entre las notaciones
++i
yi++
en C -
Utilizar la notación
++i
como estilo comúnmente aceptado para las sentencias de bucle en C
Este artículo explicará varios métodos de uso de los operadores de incremento prefijo vs postfijo, también conocidos como i++
vs ++i
, en C.
Principales diferencias entre las notaciones ++i
y i++
en C
La parte fundamental de estas dos notaciones es el operador unario de incremento ++
que incrementa su operando, por ejemplo i
, en 1. El operador de incremento puede venir antes del operando como prefijo ++i
o después del operando como operador postfijo - i++
.
Un comportamiento ligeramente inusual surge cuando el valor de la variable incrementada con el operador ++
se utiliza en una expresión. En este caso, los incrementos prefijo y postfijo se comportan de forma diferente. Es decir, el operador prefijo incrementa su operando antes de que se utilice su valor, mientras que el operador postfijo incrementa el operando después de que se haya utilizado el valor.
Como resultado, la función printf
que utiliza la expresión i++
como argumento imprimirá el valor de i
antes de que se incremente en uno. Por otro lado, printf
con el operador de incremento prefijado ++i
imprimirá el valor incrementado, que será 1 en la primera iteración como se demuestra en el siguiente código de ejemplo.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 0, j = 0;
while ((i < 5) && (j < 5)) {
/*
postfix increment, i++
the value of i is read and then incremented
*/
printf("i: %d\t", i++);
/*
prefix increment, ++j
the value of j is incremented and then read
*/
printf("j: %d\n", ++j);
}
printf("At the end they have both equal values:\ni: %d\tj: %d\n\n", i, j);
exit(EXIT_SUCCESS);
}
Producción :
i: 0 j: 1
i: 1 j: 2
i: 2 j: 3
i: 3 j: 4
i: 4 j: 5
At the end they have both equal values:
i: 5 j: 5
Utilizar la notación ++i
como estilo comúnmente aceptado para las sentencias de bucle en C
Los operadores postfix y prefix tienen el mismo comportamiento funcional cuando se usan en la sentencia de bucle for
. Cuando las dos iteraciones for
se ejecutan en el código de ejemplo de abajo, imprimen los valores de k
de forma idéntica.
Tenga en cuenta que hay varias afirmaciones sobre la mejor eficiencia en el rendimiento de usar el incremento del prefijo sobre el postfijo en los bucles for
, pero la diferencia de tiempo efectiva en la mayoría de las aplicaciones será insignificante. Podemos acostumbrarnos a usar el operador prefijo como el método preferido como un estilo comúnmente aceptado.
Pero si ya está usando la notación postfija, entonces considere que el uso de compiladores modernos con las banderas de optimización correspondientes eliminará automáticamente las iteraciones de bucle ineficientes.
#include <stdio.h>
#include <stdlib.h>
int main() {
for (int k = 0; k < 5; ++k) {
printf("%d ", k);
}
printf("\n");
for (int k = 0; k < 5; k++) {
printf("%d ", k);
}
printf("\n\n");
exit(EXIT_SUCCESS);
}
Producción :
0 1 2 3 4
0 1 2 3 4
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook