Manual da Linguagem GNU C
Doar para o tradutorDoar para os autores
  • Linguagem GNU C
  • Prefácio
  • 1️1. O Primeiro Exemplo
    • Fibonacci Recursiva
      • Cabeçalho da Função
      • Corpo da Função
    • Pilha e Estouro de Pilha
    • Fibonacci Iterativa
  • 📦2. Um Programa Completo
    • Exemplo de um Programa Completo
    • Explicação do Programa Completo
    • Programa Completo Linha por Linha
    • Compilando o Programa de Exemplo
  • 👜3. Armazenamento e Dados
  • 🥑4. Além dos Inteiros
    • Um Exemplo com Números Não Inteiros
    • Um Exemplo com Arrays
    • Variações para o Exemplo com Array
  • ✍️5. Sintaxe Lexical
    • Escreva Programas em Inglês!
    • Caracteres
    • Espaços em Branco
    • Comentários
    • Identificadores
    • Operadores e Pontuação
    • Continuação de Linha
  • ➕6. Aritmética
    • Aritmética Básica
    • Aritmética de Inteiros
    • Estouro de Inteiros
      • Estouro de Inteiros sem Sinal
      • Estouro de Inteiros com Sinal
    • Aritmética em Modo Misto
    • Divisão e Resto
    • Comparações Numéricas
    • Operações de Deslocamento
      • Deslocar Gera Novos Bits
      • Advertências em Operações de Deslocamento
      • Hacks com Deslocamento
    • Operações Bit-a-bit
  • 🟰7. Expressões de Atribuição
    • Atribuição Simples
    • Lvalues
    • Atribuição Modificadora
    • Operadores de Incremento e Decremento
    • Pós-incremento e Pós-decremento
    • Armadilha: Atribuição em Subexpressões
    • Escreva Atribuições em Instruções Separadas
  • 🕹️8. Expressões de Controle de Execução
    • Operadores Lógicos
    • Operadores Lógicos e Comparações
    • Operadores Lógicos e Atribuições
    • Expressão Condicional
    • Operador Vírgula
  • 🐫9. Gramática dos Operadores Binários
  • 🏁10. Ordem de Execução
    • Reordenação de Operandos
    • Associatividade e Ordenação
    • Pontos de Sequência
    • Pós-incremento e Ordenação
    • Ordenação de Operandos
    • Otimização e Ordenação
  • 🎲11. Tipos Primitivos
    • Tipos de Dados Inteiros
      • Inteiros Básicos
      • Tipos Com ou Sem Sinal
      • Inteiros Estreitos
      • Conversão entre Tipos Inteiros
      • Tipo Booleano
      • Variações de Inteiros
    • Tipos de Dados de Ponto Flutuante
    • Tipos de Dados Complexos
    • O Tipo Void
    • Outros Tipos de Dados
    • Designadores de Tipos
  • 🪨12. Constantes
    • Constantes do Tipo Inteiro
    • Tipos de Dados de Constantes do Tipo Inteiro
    • Constantes de Ponto Flutuante
    • Constantes de Números Imaginários
    • Constantes de Caracteres
    • Constantes do Tipo String
    • Constantes do Tipo String UTF-8
    • Códigos de Caracteres Unicode
    • Constantes do Tipo Caractere Largo
    • Constantes do Tipo String Larga
  • 📐13. Tamanho de Tipo
  • Apêndices
    • F - GNU Free Documentation License
    • G - GNU General Public License
Fornecido por GitBook
Nesta página

Isto foi útil?

Editar no GitHub
Exportar como PDF

13. Tamanho de Tipo

AnteriorConstantes do Tipo String LargaPróximoF - GNU Free Documentation License

Atualizado há 1 mês

Isto foi útil?

Cada tipo de dado possui um tamanho, que é o número de bytes (veja ) que ele ocupa na memória. Para referenciar esse tamanho em um programa C, usa-se sizeof. Existem duas formas de utilizá-lo:

sizeof expressão Essa forma retorna o tamanho da expressão, com base em seu tipo de dado. Ela não calcula o valor da expressão — apenas seu tamanho —, então, se a expressão contiver efeitos colaterais ou chamadas de função, eles não serão executados. Portanto, sizeof é sempre uma operação em tempo de compilação e não tem custo em tempo de execução.

Não é permitido usar como operando de sizeof um valor que seja um campo de bits (veja ).

Por exemplo:

double a;
i = sizeof a + 10;

inicializa i com 18 na maioria dos computadores, porque a ocupa 8 bytes.

Veja como determinar o número de elementos de um array array:

(sizeof array / sizeof array[0])

A expressão sizeof array retorna o tamanho do array, e não o tamanho de um ponteiro para um elemento. No entanto, se a expressão for um parâmetro de função declarado como array, essa variável na verdade tem tipo de ponteiro (veja ), portanto o resultado será o tamanho desse ponteiro.

sizeof (tipo) Essa forma retorna o tamanho de tipo. Por exemplo:

i = sizeof (double) + 10;

é equivalente ao exemplo anterior.

Não é permitido aplicar sizeof a um tipo incompleto (veja ), nem a void. Aplicá-lo a um tipo de função retorna 1 no GNU C, o que permite que a adição de um inteiro a um ponteiro de função funcione como desejado (veja ).


Aviso: Ao usar sizeof com um tipo em vez de uma expressão, é obrigatório escrever parênteses em torno do tipo.

Aviso: Ao aplicar sizeof ao resultado de um cast (veja ), também é necessário colocar parênteses ao redor da expressão de cast para evitar ambiguidade na gramática da linguagem C. Especificamente:

sizeof (int) -x

é interpretado como:

(sizeof (int)) - x

Se o que se deseja é:

sizeof ((int) -x)

deve-se escrever exatamente assim, com os parênteses adicionais.


O tipo do valor retornado por sizeof é sempre um tipo inteiro sem sinal; qual exatamente depende da máquina. O cabeçalho stddef.h define o nome size_t como um alias (typedef) para esse tipo. Veja .

📐
Armazenamento e Dados