sizeof()
Para reservar memoria se debe saber exactamente el número de
bytes que ocupa cualquier estructura de datos. Tal y como se ha comentado
con anterioridad, una peculiaridad del lenguaje C es que estos tamaños
pueden variar de una plataforma a otra. ¿Cómo sabemos, entonces, cuántos
bytes reservar para una tabla de, por ejemplo, 10 enteros? El propio
lenguaje ofrece la solución a este problema mediante la función
sizeof()
.
La función recibe como único parámetro o el nombre de una
variable, o el nombre de un tipo de datos, y devuelve su tamaño en bytes. De
esta forma, sizeof(int)
devuelve el número de bytes que se
utilizan para almacenar un entero. La función se puede utilizar también con
tipos de datos estructurados o uniones tal y como se muestra en el siguiente programa (que te recomendamos que te
descargues, compiles y ejecutes):
#include <stdio.h> #define NAME_LENGTH 10 #define TABLE_SIZE 100 #define UNITS_NUMBER 10 struct unit { /* Define a struct with an internal union */ int x; float y; double z; short int a; long b; union { /* Union with no name because it is internal to the struct */ char name[NAME_LENGTH]; int id; short int sid; } identifier; }; int main(int argc, char *argv[]) { int table[TABLE_SIZE]; struct unit data[UNITS_NUMBER]; printf("%d\n", sizeof(struct unit)); /* Print size of structure */ printf("%d\n", sizeof(table)); /* Print size of table of ints */ printf("%d\n", sizeof(data)); /* Print size of table of structs */ return 0; }
Con esta función puedes, por tanto, resolver cualquier duda
que tengas sobre el tamaño de una estructura de datos. Basta con escribir un
pequeño programa que imprima su tamaño con sizeof()
.