¿Por qué sizeof(x++) no incrementa x en C?

De acuerdo con los estándares C99 , el operador sizeof() solo tiene en cuenta el tipo de operando, que puede ser una expresión o el nombre de un tipo (es decir, int, double, float, etc.) y no el valor obtenido al evaluar la expresión. Por lo tanto, el operando dentro del operador sizeof() no se evalúa. Se evalúa solo si el tipo del operando es una array de longitud variable porque, en ese caso, el tamaño se puede determinar solo después de evaluar la expresión.

Caso 1:

Cuando al método sizeof() se le pasa una estructura de tamaño fijo:

En este caso, el operador sizeof() no evalúa el parámetro. Solo se comprueba el tipo del parámetro y se devuelve su tamaño.

La siguiente figura muestra el flujo de trabajo del operador sizeof() en este escenario:

Ejemplo 1:

El valor de salida de x después del incremento sigue siendo 3 en comparación con el valor esperado que es 4. Esto se debe a que el operador sizeof no necesita evaluar la expresión para obtener el tamaño ya que el tipo de datos del operando no cambia y, por lo tanto, el tamaño sigue siendo el mismo.

#include <stdio.h>
  
int main()
{
    int x = 3;
    printf("%d\n", sizeof(x++));
    printf("x = %d", x);
  
    return 0;
}

Producción:

4
x = 3

Caso 2:

Cuando al método sizeof() se le pasa una estructura de tamaño variable:

En este caso, el operador sizeof() evalúa el parámetro para ver si hay algún cambio de tamaño. Si se encuentra, primero se modifica el tamaño y luego se devuelve el tamaño final.

El siguiente ejemplo ilustra el operador sizeof() en este escenario:

Ejemplo 2:

En este ejemplo, el operador sizeof necesita evaluar la expresión para calcular el tamaño de la array que se muestra en la figura. Por tanto, en este caso, obtenemos el valor de x después del incremento.

#include <stdio.h>
  
int main()
{
    int x = 3;
    printf("%d\n", sizeof(int[x++]));
    printf("x = %d", x);
  
    return 0;
}

Producción:

12
x = 4

Ejemplo 3:

Nuevamente en este ejemplo, el operador sizeof necesita evaluar la expresión para calcular el tamaño de la array que se muestra en la figura. En este ejemplo, se usa el operador de incremento posterior y, por lo tanto, la salida en la primera línea es 16. En la segunda línea, el valor de x se imprime después del incremento.

#include <stdio.h>
  
int main()
{
    int x = 3;
    printf("%d\n", sizeof(int[++x]));
    printf("x = %d", x);
  
    return 0;
}

Producción:

16
x = 4

Publicación traducida automáticamente

Artículo escrito por rituraj_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *