Curso C - 3. Tipos, Variáveis e Constantes

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





Esta notícia veio de LinuxDicas - Artigos, Dicas e Notícias Sobre o Mundo Linux
http://www.linuxdicas.com.br

O link desta notícia é:
http://www.linuxdicas.com.br/modules.php?name=Sections&op=viewarticle&artid=188