Curso de C - 3. Tipos, Variáveis e Constantes
3.1. Os Tipos de Dados
Em C temos 5 tipos básicos de dados, de onde todos os outros tipos são derivados. São eles:
| Tipo |
Descrição |
Tamanho em bytes |
Faixa mínima |
| char |
caractere |
1 |
-127 a 127 |
| int |
número inteiro |
4 |
-32767 a 32767 |
| float |
número em ponto flutuante (real) |
4 |
seis dígitos de precisão |
| double |
número em ponto flutuante de dupla precisão |
8 |
dez dígitos de precisão |
| void |
sem valor |
- |
- |
O tamanho em bytes da cada tipo de dado pode variar de acordo com o tipo do processador, da implementação do compilador, etc. Por
exemplo, em Linux um inteiro possui 4 bytes, enquanto que no DOS um inteiro possui 2 bytes. O que o padrão ANSI estipula é apenas a
faixa mínima de cada tipo, não o seu tamanho em bytes.
O tipo void é usado quando declaramos funções que não retornam nenhum valor, quando queremos declarar explicitamente que uma
função não possui argumentos, ou para criar ponteiros genéricos. Ao longo do curso mostraremos vários exemplos de uso do tipo
void.
A seguir um tabela com todos os tipos da linguagem C definidos no padrão ANSI:
| Tipo |
Tamanho em Bytes |
| char |
1 |
| unsigned char |
1 |
| signed char |
1 |
| int |
4 |
| unsigned int |
4 |
| signed int |
4 |
| short int |
2 |
| unsigned short int |
2 |
| signed short int |
2 |
| long int |
4 |
| unsigned long int |
4 |
| signed long int |
4 |
| float |
4 |
| double |
8 |
| long double |
12 |
3.2. Modificadores de Tipos de Dados
Como você deve ter visto na tabela, C possui modificadores para os tipos básicos de dados, o que extende as capacidades de
armazenamento. São eles: signed, unsigned, long e short.
Um unsigned int, por exemplo, é um inteiro sem sinal. A diferença entre números negativos e positivos é a forma como o bit
mais significativo é interpretado. O modificador unsigned faz com que esse bit seja parte do número. A faixa do unsigned int
passa a ser de 0 a 65535, e o unsigned char, de 0 a 255.
O uso do modificador signed é redundante, pos um signed int é a mesma coisa que um int. Ou seja, não é necessário
expressá-lo na declaração. Em algumas implementações, porém, o tipo char é nativamente sem sinal, o que obriga o programador a
usar o modificador signed. Leia a documentação do seu compilador para saber.
O modificador long é usado quando se precisa expressar números grandes. Um long int vai de -2147483647 a 2147483647, por
exemplo. O modificador short é o inverso, sendo usado quando precisa-se expressar números pequenos. Um short int tem a metade
do tamanho de um int.
3.3. O que são Variáveis?
Para você poder manipular dados dos mais diversos tipos, é necessário poder armazená-los na memória e poder referenciá-los quando
for preciso. É para isso que exitem as variáveis, que nada mais são do que um espaço reservado na memória, e que possuem um nome
para facilitar a referência. As variáveis podem ser de qualquer tipo visto nesta aula: int, char, float, double, etc.
Como o próprio nome diz, as variáveis podem ter o seu conteúdo alterado durante a execução do programa, ou seja, o programador tem a
liberdade de atribuir valores ao decorrer da execução.
3.4. Declaração de Variáveis
Todas as variáveis em C devem ser declaradas antes de serem usadas. A forma geral de declaração de uma variável é a seguinte:
tipo nome_da_variavel;
Exemplos:
Uma variável de cada vez:
int id;
float aux;
unsigned int i;
char carac;
Ou várias do mesmo tipo em uma única linha:
int id, obj, n, t;
char c1, c2, c3;
Onde tipo pode ser qualquer tipo válido da linguagem C, e nome_da_variavel deve ser um nome dado pelo programador, sendo o
primeiro caractere uma letra ou um "_", e os demais, letras, números ou "_".
num _carac
peso Id_obj
aluno_1 AUX
Lembrando que C diferencia maiúsculas de minúsculas.
Não são nomes válidos de variáveis:
1num -idade
$aux id@al
3.5. Inicializando Variáveis
Inicializar significa atribuir um valor inicial a uma variável. Em C, podemos inicializar variáveis na declaração:
int n=12;
Neste exemplo, estamos declarando a variável inteira n e atribuindo o valor 12 à ela. O sinal de igual (=) em C é o operador de
atribuição. Ele serve para colocar o valor (do lado direito) na variável (lado esquerdo).
Podemos também inicializar uma variável no corpo do programa, após sua declaração:
int n;
n=12;
Pode-se atribuir também variáveis a variáveis:
num=i;
Neste caso, a variável num está recebendo o valor da variável i.
Para fixar melhor, aí vai um exemplo de um programa em C contendo variáveis:
#include
int main(void)
{
int num1, num2, num3;
char ch= 'a';
num1= 3;
num2= num1;
num3= 200;
printf("num1: %d, num2: %d, num3: %d
", num1, num2, num3);
printf("ch: %c
", ch);
return 0;
}
OBS: Não se preocupe agora com printf(). Estudaremos ele a fundo em outra aula.
3.6. Variáveis Locais e Globais
As variáveis podem ser locais ou globais. As variáveis locais são aquelas declaradas dentro de uma função, sendo somente "vistas"
dentro desta função. Se você tentar acessar uma variável local de fora da função onde ela está, acontecerá um erro.
Após a execução desta função, as variáveis locais ali contidas são destruídas. Na aula sobre funções estudaremos mais sobre
variáveis locais, com exemplos.
As variáveis globais são aquelas declaradas fora de qualquer função, até da função main().
São reconhecidas pelo programa inteiro e podem ser usadas em qualquer lugar do código, mesmo dentro de funções. Seus valores ficam
guardados durante toda a execução do programa. Veja um exemplo do uso de variáveis globais:
#include
int num; /* num é uma variável global */
int main()
{
num= 10;
printf("%d", n);
return 0;
}
Assim como as variáveis locais, veremos as variáveis globais com mais detalhes na aula sobre funções.
3.7. Modificadores de Tipo de Acesso
A linguagem C possui dois modificadores de tipo de acesso, que controlam a forma como as variáveis podem ser modificadas ou
acessadas. São eles: const e volatile. Na declaração, esses modificadores devem preceder o tipo das variáveis.
O modificador const faz com que a variável possa apenas receber um valor inicial, não podendo ser alterada durante a execução do
programa. Exemplo:
const int a= 10;
O modificador volatile é usado quando uma variável precisa ser alterada de forma não explícita no código do programa. Por
exemplo, uma variável que armazena o tempo real do sistema, sendo alterada pela rotina de relógio do sistema operacional, e não
por um comando de atribuição, precisa ser declarada como volatile.
Exemplo da declaração:
volatile char *address=0x3b;
3.8. Especificadores de Classe de Armazenamento
Além dos modificadores vistos acima, que informam ao compilador a forma de acessar ou alterar uma variável, existe também os
especificadores de classe de armazenamento, que informam ao compilador a forma como a variável deve ser armazenada. Há quatro
especificadores em C: extern, static, register e auto.
Os especificadores extern e static serão vistos na aula de funções, pois o perfeito entendimento dos mesmos depende dos
tópicos vistos até esta aula.
O especificador register informa ao compilador que a variável deve ser armazenada em um registrador da CPU, e não na memória.
Isto aumenta consideravelmente a velocidade de acesso. Inicialmente, somente as variáveis int e char poderiam ser
register. O padrão ANSI então determinou que qualquer tipo pode utilizar o especificador register.
Como alguns tipos de dados não cabem em um registrador, o compilador trata variáveis register de forma que o acesso seja o mais
rápido possível.
Somente variáveis locais podem ser register. Variáveis globais não são permitidas.
O uso do especificador auto é redundante. Todas as variáveis que não possuem um especificador são auto por default.
Estudaremos melhor os esepcificadores de classe de armazenamento na aula de funções.
3.9. Constantes
Constantes em C são valores fixos, que não mudam durante a execução. Elas podem ser de qualquer tipo básico: inteiras, ponto
flutuante, caractere, strings.
| Tipo de dado |
Exemplo de constantes |
| int |
1 12 -60 |
| long int |
3500000L -34L |
| short int |
10 12 -9 |
| unsigned int |
10000U 615U |
| float |
215.10F 179e-2F 10.34 |
| double |
215.10 3.5 |
| long double |
9004.6L |
| char (único) |
'a' 'x' '
' '2' |
| char (string) |
"linguagem C" "linuxdicas" |
Na maioria dos casos C escolhe o menor tipo de dado possível para tratar uma constante, com excessão das constantes em ponto
flutuante, que são tratadas como double, por default.
Veja um exemplo de programa com constantes:
#include
int main()
{
char ch= 'a';
int n= 10;
float f= 10.4;
long int longo= 19879878L;
printf("%c %d %f %ld
", ch, n, f, longo);
return 0;
}
Bem, nesta aula você aprendeu sobre os tipos de dados que a linguagem C pode manipular. Também viu a forma de armazenar
temporariamente estes dados, com o uso de variáveis, e como expressar constantes de vários tipos em C. Na próxima aula estudaremos
os operadores da linguagem C (aritméticos, relacionais, lógicos, etc.). Não percam!
Exercícios
1. Qual a faixa numérica de uma variável int? E de um unsigned int?
2. Qual a diferença de um unsigned int para um int?
3. Por que a declaração de uma variável como signed é redundante?
4. O que são variáveis e para que servem?
5. Qual a diferença entre as variáveis locais e globais?
6. O que fazem os modificadores const e volatile?
7. Qual a vantagem em declarar uma variável inteira como um register?
8. O que são constantes? Dê exemplos.
9. Assinale a alternativa que possui um nome de variável CORRETO:
- $num
- -temp
- _carac_
- 3aux
Powered by txt2tags