Sei sulla pagina 1di 5

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIA

CAMPUS NATAL - CENTRAL


DIRETORIA DE EDUCAO E TECNOLOGIA DA INFORMAO
Av. Sen. Salgado Filho, 1559, Natal/RN, 59015-000. Fone/FAX (084) 4005-2637
E-mail: dietinf@ifrn.edu.br - Site: http://www.ifrn.edu.br/dietinf
Curso: - Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas
- Superior de Tecnologia em Redes de Computadores
Disciplina: - Algoritmos e Tcnicas de Programao
- Introduo Programao
Professor: Fabiano Papaiz

PONTEIROS
Endereos de Memria
J dissemos vrias vezes que as variveis ficam armazenadas em determinados
espaos na memria do computador. Ao trabalhar com uma varivel, geralmente no precisamos
nos preocupar com o endereo desta varivel, pois o compilador cuida destes detalhes tcnicos.
Entretanto, pode ser bastante til saber o endereo de uma varivel. Em C, utilizamos
o operador de endereo & para acessar o endereo que uma varivel ocupa na memria. Sua
sintaxe muito simples, bastando inserir o operador & na frente do nome de uma varivel:
&x;

//retorna o endereo da varivel x

&nome;

//retorna o endereo da varivel nome

O programa abaixo cria uma varivel inteira e utiliza printf para exibir o valor da
varivel e depois o seu endereo - utilizando o operador &.

A sada ser algo parecido com:

Na memria seria algo como:


2293619

...

2293620

124

2293621

...

O operador de endereo utilizvel tambm em matrizes. Quando utilizamos este


operador em uma matriz, temos o endereo inicial da matriz, que nada mais do que o endereo
do primeiro elemento da matriz. Tambm podemos utilizar o operador & para acessar os
endereos de cada elemento de uma matriz, como vemos no exemplo abaixo:

Sada:

Ponteiros
Em linguagem de programao, chamamos de ponteiros as variveis especiais que
armazenam endereos de memria. Como j vimos, as variveis possuem trs atributos bsicos:

seu nome,

o valor armazenado por ela

o endereo de memria onde ela est armazenada.

Os ponteiros, ao invs de armazenar valores, armazenam endereos de memria. Ao


utilizar um ponteiro, podemos acessar este endereo e manipular o valor que est armazenado l
dentro.
Ponteiros so utilizados constantemente em C. Por exemplo, quando trabalhamos com
matrizes, sem saber estamos trabalhando com ponteiros: a linguagem C utiliza ponteiros para
acessar as diversas posies de uma matriz.

Declarando Ponteiros
A declarao de ponteiros bem parecido com a declarao de variveis. Assim como
uma varivel comum, ponteiros precisam ter tipos (como int, float, char) para indicar ao compilador
qual o tipo de valor para o qual o ponteiro aponta. Alm disso, utilizamos o asterisco * antes do
nome, para indicar ao compilador que estamos declarando um ponteiro e no uma varivel
simples. A sintaxe da declarao de um ponteiro vista abaixo:
int

*x;

//declara um ponteiro para um int

char *c;

//declara um ponteiro para um char

float *media;

//declara um ponteiro para um float

Aps declarar um ponteiro, importante atribuir o endereo que ser armazenado por
ele. Isto feito utilizando o operador & para obter o endereo de uma varivel. A atribuio feita
da mesma forma que atribuimos valores para uma varivel. Suponha que tenhamos, em um
programa qualquer, um ponteiro chamado referencia e uma varivel chamada valor. Caso
desejssemos que o ponteiro referencia armazenasse o endereo da varivel valor, faramos a
seguinte atribuio:
referencia = &valor;

Desreferenciando um Ponteiro
Desferenciar um ponteiro nada mais do que acessar o valor que est armazenado
no endereo de memria armazenado por ele. Esta operao feita pelo operador * (que
chamamos formalmente de asterisco de indireo). Assim como utilizamos o operador de
endereo & para acessar o endereo de uma varivel, utilizamos o asterisco de indireo para
obter o valor que est dentro da posio de memria guardada pela ponteiro. Para utiliz-lo basta
adicionar o * antes do nome de um ponteiro em qualquer operao ou comando dentro um
programa:
int i = *p;

//obtem o valor armazenado no endereo de p

O programa a seguir bastante parecido com os anteriores, mas utiliza o asterisco de


indireo para obter o valor da posio de memria indicada pelo ponteiro. Alm disso, este valor
modificado utilizando este mesmo operador:

Sada:

Esta operao til para acessar e modificar valores dentro de posies de memria.
Um ponteiro com o asterisco de indireo se comporta como uma varivel comum. Podemos
utiliz-lo em comandos, expresses, atribuies e onde mais for necessrio.
Exerccios:

1. Se todo uma varivel, o que &todo?


2. Escreva um programa em C que contenha as declaraes abaixo. Para cada varivel
mostre o endereo da varivel utilizando a funo printf.
int x, yu, h;
char ch, dig;
long grande;
float salario;
double lucrobancos;

3. Considere o seguinte trecho de um programa:


int *p;
int x=9;
p=&x;
printf("%d",&p);
printf("%d",*p);
printf("%d",p);

O que ser impresso, conceitualmente, por cada comando printf?


4. Na expresso float *ptr, oat representa?
(a) A varivel ptr.
(b) O endereo de ptr.
(c) A varivel apontada por ptr.
(d) O tipo da varivel apontada por ptr.
(e) O valor de ptr.
5. Considere o seguinte trecho de um programa:
main(){
int f=10, *ptr;
:
printf("%d",*ptr);
}
Insira o cdigo necessrio para que o comando printf exiba o valor da varivel f.

Potrebbero piacerti anche