Compartilhar via


Operador sizeof

Retorna o tamanho do operando em relação ao tamanho do tipo char.

Observação

Para obter informações sobre o operador sizeof ..., consulte Reticências e modelos variádicos.

Sintaxe

sizeof unary-expression
sizeof ( type-name )

Comentários

O resultado do operador sizeof é do tipo size_t, um tipo integral definido no arquivo. <stddef.h> de inclusão. Esse operador permite que você evite especificar tamanhos de dados dependentes do computador em seus programas.

O operando para sizeof pode ser um destes:

  • O nome de um tipo. Para usar sizeof com o nome de um tipo, o nome deve ser colocado entre parênteses.

  • Uma expressão. Quando usado com uma expressão, sizeof pode ser especificado com ou sem parênteses. A expressão não é avaliada.

Quando o operador sizeof é aplicado a um objeto do tipo char, ele resulta em 1. Quando o operador sizeof é aplicado a uma matriz, ele produz o número total de bytes na matriz, não o tamanho do ponteiro representado pelo identificador da matriz. Para obter o tamanho do ponteiro representado pelo identificador de matriz, transmita-o como um parâmetro para uma função que usa sizeof. Por exemplo:

Exemplo

#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;
}

Saída de exemplo

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4

Quando o operador sizeof é aplicado a um tipo class, struct ou union, o resultado é o número de bytes em um objeto desse tipo, mais todos os preenchimentos adicionados para alinhar os membros em limites de palavras. O resultado não corresponde necessariamente ao tamanho calculado pela adição dos requisitos de armazenamento dos membros individuais. A opção de compilador /Zp e o pragma de pacote afetam os limites de alinhamento dos membros.

O operador sizeof nunca resulta em 0, até mesmo para uma classe vazia.

O operador sizeof não pode ser usado com os seguintes operandos:

  • Funções. (No entanto, sizeof pode ser aplicado aos ponteiros para as funções.)

  • Campos de bit.

  • Classes indefinidas.

  • O tipo void.

  • Matrizes alocadas dinamicamente.

  • Matrizes externas.

  • Tipos incompletos.

  • Nomes entre parênteses de tipos incompletos.

Quando o operador sizeof é aplicado a uma referência, o resultado é o mesmo que seria obtido se sizeof tivesse sido aplicado ao próprio objeto.

Se uma matriz não dimensionada é o último elemento de uma estrutura, o operador sizeof retorna o tamanho da estrutura sem a matriz.

O operador sizeof é frequentemente usado para calcular o número de elementos em uma matriz usando uma expressão no formato:

sizeof array / sizeof array[0]

Confira também

Expressões com operadores unários
Palavras-chave