sizeof operator
Consulta el tamaño del objeto o tipo.
Se utiliza cuando se debe conocer el tamaño real del objeto.
Contenidos |
Sintaxis
sizeof(
type
)
|
(1) | ||||||||
sizeof
expression
|
(2) | ||||||||
Ambas versiones devuelven un valor de tipo size_t .
Explicación
Notas
Dependiendo de la arquitectura del computador, un byte puede consistir de 8 o más bits, el número exacto proporcionado como CHAR_BIT .
sizeof ( char ) , sizeof ( signed char ) y sizeof ( unsigned char ) siempre devuelven 1 .
sizeof no se puede utilizar con tipos de función, tipos incompletos (incluyendo void ), o bit-field lvalues.
Cuando se aplica a un operando que tiene tipo estructura o unión , el resultado es el número total de bytes en dicho objeto, incluyendo el relleno interno y final. El relleno final es tal que si el objeto fuera un elemento de un arreglo, se satisfaría el requisito de alineación del siguiente elemento de este arreglo, en otras palabras, sizeof ( T ) devuelve el tamaño de un elemento de un arreglo T [ ] .
|
Si
type
es un tipo
VLA
y modificar el valor de su expresión de tamaño no afectaría el resultado de
|
(desde C99) |
Excepto si el tipo de
expression
es un
VLA
,
(desde C99)
expression
no se evalúa y el operador
sizeof
puede usarse en una
expresión constante
entera.
|
Si el tipo de expression es un arreglo de longitud variable , expression es evaluada y el tamaño del arreglo al que evalúa es calculado en tiempo de ejecución. |
(desde C99) |
El número de elementos en cualquier array a incluyendo VLA (since C99) puede determinarse con la expresión sizeof a / sizeof a [ 0 ] . Nótese que si a tiene tipo puntero (como después de la conversión de array a puntero o el ajuste de tipo de parámetro de función), esta expresión simplemente dividiría el número de bytes en un tipo puntero por el número de bytes en el tipo apuntado.
Palabras clave
Ejemplo
La salida de ejemplo corresponde a una plataforma con punteros de 64 bits e int de 32 bits
#include <stdio.h> int main(void) { short x; // type argument: printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(void(*)(void)) = %zu\n", sizeof(void(*)(void))); printf("sizeof(char[10]) = %zu\n", sizeof(char[10])); // printf("sizeof(void(void)) = %zu\n", sizeof(void(void))); // Error: function type // printf("sizeof(char[]) = %zu\n", sizeof(char[])); // Error: incomplete type // expression argument: printf("sizeof 'a' = %zu\n", sizeof 'a'); // type of 'a' is int // printf("sizeof main = %zu\n", sizeof main); // Error: Function type printf("sizeof &main = %zu\n", sizeof &main); printf("sizeof \"hello\" = %zu\n", sizeof "hello"); // type is char[6] printf("sizeof x = %zu\n", sizeof x); // type of x is short printf("sizeof (x+1) = %zu\n", sizeof(x + 1)); // type of x+1 is int }
Salida posible:
sizeof(float) = 4 sizeof(void(*)(void)) = 8 sizeof(char[10]) = 10 sizeof 'a' = 4 sizeof &main = 8 sizeof "hello" = 6 sizeof x = 2 sizeof (x+1) = 4
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 6.5.3.4 Los operadores sizeof y alignof (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
-
- 6.5.3.4 Los operadores sizeof y _Alignof (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 6.5.3.4 Los operadores sizeof y _Alignof (p: 90-91)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 6.5.3.4 El operador sizeof (p: 80-81)
- Estándar C89/C90 (ISO/IEC 9899:1990):
-
- 3.3.3.4 El operador sizeof
Véase también
|
Documentación de C++
para
sizeof
operator
|