(Parte 3 de 13)

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 13 float 4 Bytes ±3,4E-38 a ±3,4E+38 long float 8 Bytes ±1,7E-308 a ±1,7E+308 double 8 Bytes ± 1,7E-308 a ± 1,7E+308

Observação: As declarações que aparecem na tabela acima entre parênteses (), indicam que estas declarações são optativas. Por exemplo “short unsigned int” indica a mesma precisão que “unsigned int”.

O tipo int tem sempre o tamanho da palavra da máquina, isto é, em computadores de 16 bits ele terá 16 bits de tamanho.

Emprega-se o complemento de dois dos números positivos para o cálculo e representação dos números negativos.

A escolha de nomes significativos para suas variáveis pode ajudá-lo a entender o que o programa faz e prevenir erros. Uma variável não pode ter o mesmo nome de uma palavra-chave de C. Em C, letras minúsculas e maiúsculas são diferentes.

Tabela de Palavras Chaves em C:

auto default float register struct volatile break do for return switch while case double goto short typedef char else if signed union const enum int sizeof unsigned continue extern long static void

Exemplo de um programa que emprega as variáveis apresentadas.

void main() {

i = 100; /∗ variável ‘i’ recebe o valor 100∗/
y = (float) i; /∗ converte tipos∗/

Preste atenção na operação “y= (float) i;”. Esta operação é muito empregada para conversão de tipos de variáveis diferentes. Suponha que você tenha uma variável ‘x’ de tipo A e queira convertê-la para o tipo B e armazená-la em y deste tipo. Você pode executar esta operação através do operador: y = ((B) x);

Atenção: Cuidado ao converter variáveis com precisão grande para variáveis com precisão pequena, ou seja, variáveis que utilizam um número diferente de bits para representar dados. Você pode perder informações importantes por causa desta conversão. Por exemplo, se você converter um float num int, você perderá todos os dígitos depois da vírgula (precisão).

void main() { float y = 3.1415; int x = 0;

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 14 x = (int) y; /* Equivalente à: x = 3; */ }

2.6 Constantes

Um constante tem valor fixo e inalterável. No primeiro programa exemplo, mostramos o uso de uma cadeia de caracteres constante juntamente com a função printf(): printf(“Bom Dia!!!!”);

Há duas maneiras de declarar constantes em C:

a) usando a diretiva #define do pré-processador: #define < nome da constante > < valor >

Esta diretiva faz com que toda aparição do nome da constante no código seja substituída antes da compilação pelo valor atribuído. Não é reservado espaço de memória no momento da declaração define. A diretiva deve ser colocada no inicio do arquivo e tem valor global (isto é, tem valor sobre todo o código).

Exemplo: #define size 400

#define true 1

#define false 0 /* → não usa ";" nem "=" */ b) utilizando a palavra-chave "const": const < tipo > < nome > = < valor >;

Esta forma reserva espaço de memória para uma variável do tipo declarado. Uma constante assim declarada só pode aparecer do lado direito de qualquer equação (isto equivale a dizer que não pode ser atribuido um novo valor aquela “variável” durante a execução do programa).

Exemplo: const char letra = 'a'; const int size = 400; const double gravidade = 9.81;

/* Programa: Exemplo do uso de Constantes */ #define Size 4 void main() { const char c = ‘c’; const int num = 10; int val = Size; }

Em C uma constante caractere é escrita entre aspas simples, uma constante cadeia de caracteres entre aspa duplas e constantes numéricas com o número propriamente dito.

Exemplos de constantes: a) caracter: ‘a’ b) cadeia de caracteres: “Bom Dia !!!!” c) número: -3.141523

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 15

2.7 Ponteiros

Uma das mais poderosas características oferecidas pela linguagem C é o uso de ponteiros. Um ponteiro proporciona um modo de acesso a variáveis sem referenciá-las diretamente. O mecanismo usado para isto é o endereço da variável. De fato, o endereço age como intermediário entre a variável e o programa que a acessa.

Basicamente, um ponteiro é uma representação simbólica de um endereço. Portanto, utilizase o endereço de memória de uma variável para acessá-la.

Um ponteiro tem como conteúdo um endereço de memória. Este endereço é a localização de uma outra variável de memória. Dizemos que uma variável aponta para uma outra quando a primeira contém o endereço da segunda.

A declaração de ponteiros tem um sentindo diferente da de uma variável simples. A instrução: int *px; declara que *px é um dado do tipo int e que px é um ponteiro, isto é, px contém o endereço de uma variável do tipo int.

Para cada nome de variável (neste caso px ), a declaração motiva o compilador a reservar dois bytes de memória onde os endereços serão armazenados. Além disto, o compilador deve estar ciente do tipo de variável armazenada naquele endereço; neste caso inteiro.

O endereço de uma variável pode ser passado à um ponteiro através do operador &, como apresentado abaixo:

ptr = 0;/* inicializa o ponteiro com o endereco ‘0’ */
valor = *ptr; /* acessa o conteúdo apontado por ‘ptr’ e */
/* atribui a ‘valor’*/

/* Exemplo com Ponteiros */ void main() { int num, valor; /* declara as variável inteira ‘num’ e ‘valor’ */ int *ptr; /* declara um ponteiro para um inteiro */ ptr = # /* atribui ao ptr o endereço da variável num */ num = 10; /* atribui à variável inteira o valor ‘10’ */ }

Neste programa, primeiro declaram-se duas variáveis inteiras. Em seguida, declara-se um ponteiro para uma variável do tipo inteira.

Este ponteiro tem o seu conteúdo inicializado com ‘0’. Este é um procedimento normal na manipulação de ponteiros, muito empregado para evitar o aparecimento de erros. Pois, enquanto o endereço de um ponteiro for nulo, isto indicará que este endereço contém um valor inválido e, portanto, o conteúdo representado por este endereço não deve ser acessado.

Na seqüência, emprega-se o operador & para obter o endereço da variável ‘num’ e armazenar este endereço em ‘ptr’.

Logo após, atribuímos a variável inteira ‘num’ o valor 10. Como ‘ptr’ contém o endereço de ‘num’, logo ‘ptr’ poderá já acessar o valor 10 armazenado na variável ‘num’. Isto é feito na última linha, onde o conteúdo apontado por ‘ptr’ é acessado e copiado para a variável ‘valor’. Outro exemplo da manipulação de ponteiros:

void main() { int i, j, *ptr; /* declara as variáveis */ i = 1; /* i recebe o valor ‘1’ */

Curso de Linguagem Computacional C/C++

Sistemas Industriais Inteligentes – DAS – CTC – UFSC 16 j = 2; /* j recebe o valor ‘2’ */ ptr = &i; /* ptr recebe o valor do endereço de i */ *ptr = *ptr + j; /* equivale a: i = i + j */ }

Nosso objetivo neste momento não é apresentar todas as potencialidades dos ponteiros.

Estamos aqui apresentando os ponteiros primeiramente como um tipo de dado especial. O importante aqui é entender o conteúdo de um ponteiro e como este pode ser empregado. Posteriormente, apresentaremos as funcionalidades dos ponteiros à medida que formos evoluindo no aprendizado de C.

2.8 Exercícios

2.1 Crie o seu programa “Hello, World!” ou “Olá, Mamãe!”;

2.2 Crie um programa que contenha todos os tipos de variáveis possíveis e as combinações dos modificadores possíveis. Inicialize estas variáveis com valores típicos. Use o método para a conversão de tipos para converter:

a) A variávelo do tipo char em todos os outros tipos de variáveis.

(Parte 3 de 13)

Comentários