O que é uma variável em C? Aprenda int, double e char com diagramas claros.
📖 O que você vai aprender nesta página
✅ Essencial
int para inteiros, double para decimais, char para um caractere
Declarar: int x;, atribuir: x = 5;
= é atribuição, não igualdade
Sempre inicialize antes de usar (int x = 0;)
⭐ Leia se tiver tempo
O tamanho dos tipos é definido pela implementação (conheça os valores típicos)
int / int trunca — pegadinha clássica de iniciante
Overflow de inteiro com sinal é comportamento indefinido
O que é uma Variável — Um Espaço Nomeado para Armazenar Dados
Uma variável é um espaço nomeado de armazenamento que guarda um dado.
O nome da variável rotula o espaço; o valor é o que está guardado lá dentro.
Quando você precisa do dado depois, é só se referir a ele pelo nome.
variável a
?
+
variável b
?
=
variável c
?
Onde as Variáveis Vivem — Dentro do Computador
Os valores das variáveis ficam armazenados na memória (RAM) do computador.
CPU (Processador)
Executa o programa e faz os cálculos.
Memória (RAM)
Guarda os dados com os quais a CPU está trabalhando. As variáveis vivem aqui.
Disco Rígido (Armazenamento)
Armazenamento de dados de longo prazo.
Dentro da Memória — O Mundo dos Bits (0/1)
A memória é uma longa sequência de bits, cada um guardando 0 ou 1. O valor de uma variável ocupa alguns bits consecutivos, e o nome da variável rotula essa região.
Representação binária de int num = 5; na memória (32 bits)
Tipos de Dados — Toda Variável Tem um Tipo
Toda variável tem um tipo, e cada tipo reserva um número diferente de bytes na memória.
Tipo inteiro: int
Exemplos: -2, -1, 0, 1, 2, 3, ... Sem parte fracionária. Tipicamente 4 bytes (definido pela implementação). int num = 5;
Ponto flutuante: double
Exemplos: 1.2, -2.68, 3.14, 79.69, ... Para números com parte decimal. Tipicamente 8 bytes (IEEE 754 double). double pi = 3.14;
Comparação de Tamanho (valores típicos)
char (1B)
int (4B)
float (4B)
double (8B)
Importante: o padrão C só fixa larguras mínimas (por exemplo, int ≥ 16 bits, long ≥ 32 bits). Os tamanhos reais são definidos pela implementação. Os números acima são típicos em desktop/Linux/macOS modernos com gcc. Imprima sizeof(int) via %zu para conferir no seu ambiente.
Escolha um tipo pela "forma da caixa"
Escolha o tipo com base nos valores que você precisa guardar. Na dúvida, siga este fluxograma:
① Precisa de decimais?
→ Sim: double (mais preciso que float)
→ Não: vá para ② ② Armazenando um único caractere?
→ Sim: char
→ Não: vá para ③ ③ Inteiros
→ Valores até ±2.147.483.647: int (use por padrão)
→ Maiores: long long
Tipo
Uso típico
Faixa aproximada
int
contagens, índices, pontuações
≈ -2,1B a +2,1B em int de 32 bits
long long
populações, timestamps, IDs grandes
pelo menos 64 bits, ≈ ±9,2 × 1018
double
alturas, médias, probabilidades
15 a 17 dígitos significativos (IEEE 754)
char
um caractere ASCII
tipicamente -128 a 127 (sinal definido pela implementação)
unsigned int
tamanhos não negativos
0 a ≈4,2B em int de 32 bits
Regra prática para iniciantes:int para números inteiros, double para decimais. Raramente você vai precisar de float, short ou long por conta própria.
Pegadinhas comuns de iniciantes
Pegadinha 1: int dividido por int trunca
Uma das pegadinhas mais comuns para iniciantes em C:
int a = 7;
int b = 2;
double r = a / b; // r é 3.0 (não 3.5!)printf("%f\n", r); // → 3.000000
Por quê? int / int devolve int (a parte fracionária é descartada). 7/2 é 3, e esse 3 é então armazenado como 3.0 ao ir para um double.
// Correção: faça cast de um operando para doubledouble r = (double)a / b; // → 3.5// Ou declare como double desde o iníciodouble a = 7, b = 2;
double r = a / b; // → 3.5
Pegadinha 2: estourar a faixa do int
Um int de 32 bits só segura cerca de ±2,1 bilhões. Dá para contar a população do Brasil; a do mundo não cabe.
int big = 2000000000;
big = big + 2000000000; // deveria ser 4B...printf("%d\n", big); // resultado indefinido (normalmente aparece um número negativo no hardware real)
Importante: no padrão C, overflow de inteiro com sinal é comportamento indefinido. Não memorize como "dá a volta para negativo". Os compiladores assumem que overflow nunca acontece ao otimizar, então o resultado pode ser genuinamente imprevisível — laços que desaparecem, resultados bizarros, o que você imaginar.
Em contrapartida, overflow de unsigned é definido e faz módulo 2N.
Opções mais seguras: ① usar long long (%lld); ② verificar contra INT_MAX (de <limits.h>) antes da operação; ③ ativar detecção em tempo de execução com -fsanitize=undefined no gcc/clang.
Pegadinha 3: especificador de formato errado
Um especificador de formato do printf precisa casar com o tipo do argumento. Se não bater, você vê saída esquisita — ou pior, comportamento indefinido.
Tipo
Formato
Exemplo
int
%d
printf("%d", 42);
double
%f / %lf
printf("%f", 3.14);
char
%c
printf("%c", 'A');
char * (string)
%s
printf("%s", "hello");
long long
%lld
printf("%lld", 9000000000LL);
Pegadinha 4: variáveis não inicializadas
int x; // só declaração; conteúdo indefinidoprintf("%d\n", x); // → valor lixo (muda a cada execução)// Correto:int x = 0; // inicialize com 0
Sempre inicialize: diferente de Python, C não zera suas variáveis automaticamente.
Pegadinha 5: regras de nomenclatura
Só letras, dígitos e _ — nenhum outro símbolo
Não pode começar com dígito (1st é inválido, first está ok)
Palavras reservadas não podem ser usadas como nome (int, if, return, ...)
Case-sensitive: age e Age são duas variáveis diferentes
Escolha nomes com significado: score é melhor que a, e radius melhor que x1
Declaração, Atribuição e Sobrescrita
Antes de usar uma variável, você declara (o que reserva espaço na memória) e depois atribui um valor a ela.
int num; // Declaração: reserva memória para a variável
num = 5; // Atribuição: armazena um valor ( = significa "atribuir", NÃO igualdade!)
Fique atento:= não é o sinal de igual da aula de matemática — é atribuição. Ele copia o valor da direita para a variável da esquerda.
Atribuir a uma variável não declarada é erro:x = 23; → "quem é x?!"
Como Funciona a Sobrescrita
Atribuir um novo valor a uma variável sobrescreve o antigo — o valor anterior é perdido. Uma variável guarda exatamente um valor por vez.
variável num
—
Atribuir uma Variável a Outra
x = y; copia o valor de y para x. O próprio y permanece igual.
variável x
10
←
variável y
33
Execução Passo a Passo — Veja as Variáveis Mudarem
variable_demo.c
Estado das variáveis
Nome
Tipo
Valor
Saída padrão
Experimente — Variáveis
my_vars.c
Saída
Clique em "Executar" para rodar...
💡 Algumas coisas para tentar
Guarde um número negativo como -100 em um int e imprima com %d
Coloque 3000000000 em um int e veja o overflow acontecer
Compare double x = 7 / 2; com double x = 7.0 / 2;
Imprima char c = 'A'; com %d para ver o código ASCII