Curso C – Aula 08

Por Guilherme Farias em 28 de janeiro de 2012

Nesta oitava aula vamos aprender como usar ponteiros, primeiramente vamos relembrar das primeiras aulas do curso, onde vimos que cada variável guarda um tipo especifico, as variáveis do tipo “int” guardam números inteiros, as do tipo “char” guardam caracteres e os ponteiros guardam endereços de memória.

Em C, quando declaramos um ponteiro, temos que informar qual o tipo de variável que o ponteiro vai apontar, veja como ele é declarado:

tipo-do-ponteiro *nome-do-ponteiro;

Note que o ponteiro tem um asterisco (*) antes do nome, é esse asterisco que vai informar ao compilador que aquilo é um ponteiro.

Usando ponteiros

No exemplo a seguir vamos mostrar um pouco de como funciona um ponteiro.

int numero;
int *ponteiro;
ponteiro=№
printf("Digite um numero:n");
scanf("%i", ponteiro);
printf("Você digitou o numero: %i ", numero);

Vamos veja o passo a passo do que foi feito neste código:

  1. Declaramos a variável “número” e o ponteiro “ponteiro”
  2. Atribuirmos o endereço de memória da variável “número” ao ponteiro, ou seja, tudo que for feito com o ponteiro será direcionado à variável “numero”
  3. Imprimimos na tela uma mensagem pedindo para que o usuário digitasse um número
  4. Recebemos o número digitado e armazenamos no ponteiro, como o ponteiro está apontando para a variável “numero” então o valor recebido foi guardado na variável “numero”
  5. Imprimimos na tela a variável número.


Observações
* Note que na hora de armazenar o valor, não utilizamos o “&”, isto porque já estamos adicionado em um endereço de memória.
* É muito importante lembrar que:

  • numero = inteiro salvo na variável “numero”
  • &numero = endereço de memória da variável “numero”
  • ponteiro = endereço de memória da variável “numero”
  • *ponteiro = inteiro salvo na variável “numero”

* Utilizar ponteiros pode ajudar bastante na elaboração do programa, mas também pode confundir muito o programador, é recomendado utilizar com moderação.

Incremento e Decremento

Vocês devem ter notado que quando utilizamos o “for” usamos geralmente da seguinte maneira:

for(x=0;x<10;x++){
}

O "x++" significa que o valor de 'x' será incrementado a cada execução, ou seja, ele começa por 0, passa por 1, depois 2 e assim por diante, até chegar ao valor menor que 10.
Assim como o incremento, há também o decremento, que reduz o valor a cada execução.
Veja o exemplo a seguir:

int y;
int *p;
int x;
y = 0;
p = &y;
x = (*p)++;
printf("%i, %i, %in", x, *p, y);

O resultado será: 0, 1, 1.

vamos conferir o passo a passo e entender o motivo deste resultado:

  1. Declaramos o ponteiro e as variáveis
  2. "Y" recebe o valor 0
  3. O ponteiro "p" recebe o endereço de memória de "y"
  4. "x" recebe o valor do número salvo na variável cujo endereço de memória está guardado no ponteiro "p", ou seja, "x" receberá o valor 0/li>
  5. o conteúdo do ponteiro "p" é incrementado
  6. Note que o "x" não recebeu o valor incrementado, poís o incremento só acontece depois da execução

OBS: para que X recebesse o valor incrementado, a atribuição teria que ser a seguinte: x = ++(*p);
neste caso aconteceria o que chamamos de pré-incremento, quando o valor é incrementado antes da execução da linha.


Exercicio:

1) Qual será a saída do programa após a execução do seguinte algoritmo?
int n1, n2, *p;
n1 = 10;
p = &n1;
n2 = --(*p);
printf("%in", *p);

2) Supondo que o endereço de memória da variável n1 é 2000, qual será as saídas?
(OBS: %i = numero inteiro, %f = numero decimal e %p = endereço de memória em hexadecimal)

int n1, *p;
n1 = 5;
p = &n1;
p++;
printf("%i n", n1);
p--;
p = 10;
printf("%i %pn", n1, p);

Veja também:
Aula 01
Aula 02
Aula 03
Aula 04
Aula 05
Aula 06
Aula 07
Aula 08

1 comentário

Deixe uma resposta

O seu endereço de email não será publicado

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>