C é rigoroso quanto ao que contém na memória. Não adivinha. Você precisa dizer exatamente que tipo de dados está armazenando. Isto não é apenas pedantismo. Afeta o modo como o programa é executado, a quantidade de memória que ele usa e se os cálculos saem corretos ou são lixo.
Os tipos de variáveis padrão
Existem três tipos de variáveis padrão em C.
Inteiro: int
Este é um número inteiro de 4 bytes. Ele lida com números inteiros.
Ponto flutuante: float
Este é um valor de ponto flutuante de 4 bytes. Ele lida com decimais.
Personagem: char
Este é um caractere único de 1 byte. Pense em “a” ou “3”. Uma string em C é apenas um array desses caracteres.
Depois, há tipos de derivativos. Você os usa quando os três padrões não funcionam.
double: Um valor de ponto flutuante de 8 bytes. Mais precisão.short: Um número inteiro de 2 bytes. Menos memória, menos alcance.unsigned shortouunsigned int: Estes lidam apenas com números inteiros positivos. Nenhum sinal. Se você precisar rastrear contagens populacionais ou tamanhos de pacotes, esta geralmente é a escolha certa.
Operadores e precedência de operadores
Os operadores em C parecem familiares.
+adição-subtração/divisão*multiplicação- mod
%
Mas cuidado com a divisão. O operador / executa a divisão inteira se ambos os operandos forem inteiros. Caso contrário, ele executa a divisão de ponto flutuante.
Veja este código:
Ele imprime um valor de ponto flutuante porque a é declarado como tipo float. Mas a será 3,0. Por que? Porque o código executou a divisão inteira primeiro. 10 dividido por 3 é 3. O resultado é 3. Então esse 3 é convertido em 3,0 quando armazenado em a. A precisão foi perdida antes mesmo de atingir a variável.
A precedência do operador em C segue regras padrão. A divisão e a multiplicação acontecem antes da adição e da subtração.
O resultado de 5+3*4 é 17. Não 32. O operador * tem precedência maior que +. Você pode substituir isso por parênteses. (5+3)*4 é 32. O 5+3 é avaliado primeiro.
A precedência fica confusa mais tarde. Depois que os ponteiros entram no bate-papo, fica complicado. Mas por enquanto, lembre-se: multiplique e divida antes de somar e subtrair.
Tipografia
C permite converter tipos dinamicamente. Você faz isso frequentemente com dicas. Também acontece automaticamente durante a atribuição para determinados tipos.
No exemplo acima, o resultado inteiro de 10/3 foi automaticamente convertido em float. Mas e se você quisesse o decimal?
Você faz a conversão de tipo colocando o nome do tipo entre parênteses antes do valor.
Substitua a=10/3; por a=(float)10/3;.
Agora a é 3,33333. O 10 é convertido em um valor de ponto flutuante antes da divisão. A divisão acontece em terrenos de ponto flutuante. O resultado mantém suas casas decimais.
Typedef
Você pode declarar tipos nomeados e definidos pelo usuário em C com a instrução typedef. Isso é comum no código C.
Isso permite declarar tipos booleanos. C não possui um tipo nativo bool em padrões mais antigos, então esta é uma solução alternativa.
Se você não gosta da palavra “float”, você pode dizer:
Então mais tarde:
Coloque instruções typedef em qualquer lugar do programa. Apenas certifique-se de que eles venham antes do primeiro uso.
Estruturas
Estruturas em C agrupam variáveis em um pacote.
Sempre que você quiser declarar estruturas do tipo rec, você deve dizer struct rec. Isso é fácil de esquecer. Você receberá erros do compilador se deixar de fora a struct.
Você pode compactar o código:
Aqui, a declaração do tipo e a variável r são declaradas na mesma instrução.
Ou use typedef para o nome da estrutura. Se você odeia digitar struct rec r toda vez:
Em seguida, declare os registros dizendo:
Acesse campos usando um ponto final. r.a = 5;.
Matrizes
Você declara arrays inserindo um tamanho após a declaração normal.
Matrizes são blocos contíguos de memória. Acessar um índice fora dos limites é um comportamento indefinido. Pode falhar. Pode corromper dados. Pode parecer funcionar até que não funcione.
Incrementando
C possui atalhos para operações comuns.
i = i + 1;torna-sei++;i = i - 1;torna-sei--;i = i + 3;torna-sei += 3;i = i * j;torna-sei *= j;
Estes não são apenas açúcar sintático. Eles geralmente compilam em código de máquina mais eficiente. Use-os.
Erros C a serem evitados
O operador / com dois inteiros é uma armadilha. Ele trunca a parte decimal. Sempre verifique seus tipos antes de dividir. Se você precisar de precisão, converta um operando para float ou double primeiro.
Pense nisso sempre que usá-lo. Caso contrário, seus números estarão errados. E depurar problemas de divisão inteira é doloroso.
Experimente isto
- Experimente a digitação. Tente
int,char,float. Veja o que acontece quando você os mistura. - Crie uma matriz de registros. Escreva o código para classificar essa matriz em um campo inteiro. Ele ensina sobre ponteiros, layout de memória e fluxo de controle.
Os detalhes são importantes em C. Se perder um tipo, todo o programa será interrompido. Faça certo e ele correrá rápido.


























