Resultado del operador sizeof

Prediga la salida del siguiente programa.

#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {1, 2, 3, 4, 5, 6, 7};
  
int main()
{
 int i;
  
 for(i = -1; i <= (TOTAL_ELEMENTS-2); i++)
   printf("%d\n", array[i+1]);
  
 getchar();
 return 0;
}

Salida: No se imprime nada porque la condición del bucle no es verdadera por primera vez.

El resultado de sizeof para un operando de array es el número de elementos en la array multiplicado por el tamaño de un elemento en bytes. Por lo tanto, el valor de la expresión TOTAL_ELEMENTS en el programa anterior es 7.
El tipo de datos del resultado sizeof es unsigned int o unsigned long dependiendo de la implementación del compilador. Por lo tanto, en la condición de bucle i <= (TOTAL_ELEMENTS-2), un int se compara con un valor sin signo. int se convierte implícitamente a unsigned (verdadero tanto para unsigned int como para unsigned long). Entonces, -1 (equivalente sin signo 4294967295 si los enteros se almacenan usando 32 bits) se compara con TOTAL_ELEMENTS – 2 y la condición no es verdadera por primera vez.

Escriba comentarios si encuentra algo incorrecto en la publicación anterior.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *