====== Tipos de dados ======
Em C, as variáveis são estaticamente tipadas, ou seja, têm seu tipo pré-definido no código. Em princípio o tipo de uma variável não pode ser mudado (embora isso possa ser contornado através de operações especiais como o //type casting//).
Os principais tipos de dados em C são:
* Tipos escalares
* Tipos aritméticos
* Inteiros
* Reais
* Complexos (C99)
* [[Ponteiros]]
* Tipos não-escalares
* Arranjos ([[vetores|vetores e matrizes]])
* [[Estruturas]]
* [[Uniões]]
===== Tipos inteiros =====
Os tipos inteiros básicos no padrão C99 em máquinas de 32 bits e 64 bits são:
^ Tipo ^ Tamanho (32 bits) ^ Faixa (32 bits) ^ Tamanho (64 bits) ^ Faixa (64 bits) ^
| ''char'' | 1 byte | -128 a +127 ou\\ 0 a 255 | idem | idem |
| ''unsigned char'' | 1 byte | 0 a 255 | idem | idem |
| ''signed char'' | 1 byte | -128 a +127 | idem | idem |
| ''short'' (ou ''signed short'') | 2 bytes | -32.768 a +32.767 | idem | idem |
| ''unsigned short'' | 2 bytes | 0 a 65.535 | idem | idem |
| ''int'' (ou ''signed int'') | 4 bytes | -231 a +231 - 1 | idem | idem |
| ''unsigned int'' | 4 bytes | 0 a 232 - 1 | idem | idem |
| ''long'' (ou ''signed long'') | 4 bytes | -231 a +231 - 1 | 8 bytes | -263 a +263 - 1 |
| ''unsigned long'' | 4 bytes | 0 a 232 - 1 | 8 bytes | 0 ... 264 - 1 |
| ''long long'' (ou ''signed long long'') | 8 bytes | -263 a +263 - 1 | idem | idem |
| ''unsigned long long'' | 8 bytes | 0 a 264 - 1 | idem | idem |
| ''*'' e ''&'' (endereços) | 4 bytes | - | 8 bytes | - |
O arquivo ''limits.h'' define constantes para os limites de valores aceitos dos tipos inteiros, como ''INT_MIN'', ''LONG_MAX'', etc. No Linux, esse arquivo se encontra em ''/usr/include/limits.h''.
Como alguns tipos inteiros básicos dependem da implementação do compilador ou da plataforma de execução (16, 32 ou 64 bits), o padrão C99 trouxe definições de tipos inteiros **de tamanho fixo** (encontradas no arquivo ''inttypes.h''), como ''int8_t'' (inteiro de 8 bits com sinal), ''uint32_t'' (inteiro de 32 bits sem sinal), etc.
Mais informações sobre tipos de dados em C podem ser encontradas [[https://en.wikipedia.org/wiki/C_data_types|nesta página]].
===== Tipos reais =====
Os tipos reais (de ponto flutuante) básicos são:
^ Tipo ^ Tamanho (bytes) ^ Faixa de valores ^ Precisão ^
| ''float'' | 4 bytes | ±1.2×10-38 a ±3.4×10+38 | 6 dígitos |
| ''double'' | 8 bytes | ±2.3×10-308 a ±1.7×10+308 | 15 dígitos |
| ''long double'' | 10 bytes | ±3.4×10-4932 a ±1.1×10+4932 | 19 dígitos |
===== Tipo booleano =====
A especificação C ANSI original **não possui** um tipo booleano. Em seu lugar, toda variável ou expressão cujo resultado seja zero (ou nulo) é avaliada como FALSA; caso o resultado seja diferente de zero (ou não-nulo), a variável ou expressão é considerada VERDADEIRA (inclusive valores negativos).
A especificação C99 trouxe um tipo booleano (''bool''), acessível através do arquivo ''stdbool.h''.
===== O Tipo void =====
A palavra reservada ''void'' designa um valor ou variável de tipo desconhecido. Esse tipo é usado em algumas situações especiais que serão vistas posteriormente, como ponteiros para variáveis cujo tipo é desconhecido a priori ou para indicar que uma função não retorna nenhum valor válido.