Operador sizeof
Genera el tamaño de su operando con respecto al tamaño de tipo char
.
Nota:
Para obtener información sobre el operador sizeof ...
, consulte Puntos suspensivos y plantillas variádicas.
Sintaxis
sizeof unary-expression
sizeof ( type-name )
Comentarios
El resultado del operador sizeof
es de tipo size_t
, un tipo entero definido en el archivo de inclusión <stddef.h>. Este operador permite no tener que especificar tamaños de datos dependientes del equipo en los programas.
El operando para sizeof
puede ser uno de los siguientes:
Nombre de tipo. Para utilizar
sizeof
con un nombre de tipo, el nombre debe ir entre paréntesis.Expresión. Cuando se utiliza con una expresión, se puede especificar
sizeof
con o sin paréntesis. La expresión no se evalúa.
Cuando el operador sizeof
se aplica a un objeto de tipo char
, genera 1. Cuando el operador sizeof
se aplica a una matriz, genera el número total de bytes de esa matriz, no el tamaño del puntero representado por el identificador de matriz. Para obtener el tamaño del puntero representado por el identificador de matriz, páselo como parámetro a una función que utilice sizeof
. Por ejemplo:
Ejemplo
#include <iostream>
using namespace std;
size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}
int main()
{
char szHello[] = "Hello, world!";
cout << "The size of a char is: "
<< sizeof( char )
<< "\nThe length of " << szHello << " is: "
<< sizeof szHello
<< "\nThe size of the pointer is "
<< getPtrSize( szHello ) << endl;
}
Salida de ejemplo
The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4
Cuando el operador sizeof
se aplica a un tipo class
, struct
o union
, el resultado es el número de bytes de un objeto de ese tipo, además del relleno que se agregue para alinear los miembros en los límites de palabra. El resultado no corresponde necesariamente al tamaño que se calcula agregando los requisitos de almacenamiento de los miembros individuales. La opción /Zp del compilador y la directiva pragma pack afectan a los límites de alineación de los miembros.
El operador sizeof
nunca genera 0, incluso para una clase vacía.
El operador sizeof
no se puede utilizar con los operandos siguientes:
Funciones. (Sin embargo,
sizeof
se puede aplicar a punteros a funciones).Campos de bit.
Clases no definidas.
El tipo de la clase
void
.Matrices asignadas dinámicamente.
Matrices externas.
Tipos incompletos.
Nombres entre paréntesis de tipos incompletos.
Cuando el operador sizeof
se aplica a una referencia, el resultado es el mismo que si se hubiera aplicado sizeof
al propio objeto.
Si una matriz sin tamaño es el último elemento de una estructura, el operador sizeof
devuelve el tamaño de la estructura sin la matriz.
El operador sizeof
suele utilizarse para calcular el número de elementos de una matriz mediante una expresión con este formato:
sizeof array / sizeof array[0]
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de