operador sizeof en C

 

Sizeof es un operador muy utilizado en C o C++ . Es un operador unario de tiempo de compilación que se puede usar para calcular el tamaño de su operando. El resultado de sizeof es de tipo integral sin signo, que generalmente se denota por size_t. sizeof se puede aplicar a cualquier tipo de datos, incluidos los tipos primitivos, como los tipos enteros y de punto flotante, los tipos de puntero o los tipos de datos compuestos, como la estructura, la unión, etc.
Uso El operador  
sizeof() se usa de manera diferente según el tipo de operando . 
 

 

1. Cuando el operando es un tipo de datos. 
Cuando se utiliza sizeof() con tipos de datos como int, float, char… etc., simplemente devuelve la cantidad de memoria asignada a esos tipos de datos.
Veamos ejemplo: 
 

C

#include <stdio.h>
int main()
{
    printf("%lu\n", sizeof(char));
    printf("%lu\n", sizeof(int));
    printf("%lu\n", sizeof(float));
    printf("%lu", sizeof(double));
    return 0;
}

C++

#include <iostream>
using namespace std;
 
int main()
{
    cout << sizeof(char)<<"\n";
    cout << sizeof(int)<<"\n";
    cout << sizeof(float)<<"\n";
    cout << sizeof(double)<<"\n";
    return 0;
}
Producción

1
4
4
8

Nota: sizeof() puede dar un resultado diferente según la máquina, hemos ejecutado nuestro programa en el compilador gcc de 32 bits.

2. Cuando el operando es una expresión. 
Cuando se usa sizeof() con la expresión, devuelve el tamaño de la expresión. Veamos ejemplo: 
 

C

#include <stdio.h>
int main()
{
    int a = 0;
    double d = 10.21;
    printf("%lu", sizeof(a + d));
    return 0;
}

C++

#include <iostream>
using namespace std;
int main()
{
    int a = 0;
    double d = 10.21;
    cout << sizeof(a + d);
    return 0;
}
Producción

8

Como sabemos por el primer caso, el tamaño de int y double es 4 y 8 respectivamente, a es una variable int mientras que d es una variable doble. El resultado final será un doble, por lo que la salida de nuestro programa es de 8 bytes.

tipo de operador

sizeof() es un operador de tiempo de compilación. el tiempo de compilación se refiere al momento en que el código fuente se convierte en un código binario. No ejecuta (ejecuta) el código dentro(). Veamos un ejemplo.

C++

#include <iostream>
 
using namespace std;
int main() {
 
 
 int y;
 
 int x = 11;
 
 y = sizeof(x++); //value of x doesn't change
 
 cout<<y<<" "<<x;// prints 4 11
 
}

C

// C Program to illustrate that the 'sizeof' operator
// is a 'compile time operator'
 
#include <stdio.h>
 
int main(void)
{
   
  int y;
 
  int x = 11;
 
  y = sizeof(x++); //value of x doesn't change
 
  printf("%i %i", y, x); // prints 4 and 11
   
  return (0);
 
}
 
// This code is contributed by sarajadhav12052009
Producción

4 11

Si tratamos de incrementar el valor de x, sigue siendo el mismo. Esto se debe a que x se incrementa dentro de los paréntesis y sizeof() es un operador de tiempo de compilación.  

Necesidad de Sizeof  
1. Para averiguar el número de elementos en una array. 
Sizeof se puede usar para calcular el número de elementos de la array automáticamente. Veamos Ejemplo: 
 

C

#include <stdio.h>
int main()
{
    int arr[] = { 1, 2, 3, 4, 7, 98, 0, 12, 35, 99, 14 };
    printf("Number of elements:%lu ", sizeof(arr) / sizeof(arr[0]));
    return 0;
}

C++

#include <iostream>
using namespace std;
 
int main()
{
    int arr[] = { 1, 2, 3, 4, 7, 98,
    0, 12, 35, 99, 14 };
    cout << "Number of elements: "
    <<(sizeof(arr) / sizeof(arr[0]));
    return 0;
}
Producción

Number of elements:11 

2. Para asignar un bloque de memoria dinámicamente
sizeof se usa mucho en la asignación de memoria dinámica. Por ejemplo, si queremos asignar memoria para que sea suficiente para contener 10 enteros y no sabemos el tamaño de (int) en esa máquina en particular. Podemos asignar con la ayuda de sizeof.
 

C

int* ptr = (int*)malloc(10 * sizeof(int));

Referencias  
https://en.wikipedia.org/wiki/Sizeof
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

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 *