Вы находитесь на странице: 1из 4

Conceito de ponteiros

Da mesma maneira que existem em C variveis do tipo char, int e float, existem variveis do
tipo ponteiro. As variveis do tipo ponteiro armazenam endereos de memria e so utilizadas
por 3 razes especficas na programao:
o Permitem a modificao de argumentos de funes: permitem que uma funo
altere valores de variveis no globais e no locais a ela atravs da referncia ao
endereo de memria da varivel passada como parmetro para a funo;
o Permitem o uso de rotinas de alocao dinmica de memria: alocao e
deslocao de memria em tempo de execuo conforme a necessidade do
programa;
o Aumento de eficincia em determinadas rotinas.
A forma de declarao de uma varivel ponteiro :
tipo *nome_varivel
Onde: tipo o tipo de varivel apontada pela varivel ponteiro.
Por exemplo:
float *p;

// p um ponteiro de float

Ou seja, p apontar para uma regio de memria que armazena um valor float.
Os ponteiros so variveis que contm endereos de memria como valores. Cada posio de
memria que usamos para armazenar um valor possui um endereo. Normalmente,

uma varivel faz uma referncia direta a um valor especfico. Um ponteiro uma varivel que
armazena um endereo em memria que contm dados de um determinado tipo. Um ponteiro
tem um nome de varivel e tambm tem um tipo que identifica que tipo de dado est
armazenado no endereo que possui. Contm um endereo de uma varivel que contm um
valor especfico. Sob esse ponto de vista, um nome de varivel faz uma referncia direta a um
valor, e um ponteiro faz referncia indireta a um valor (Fig. 7.1). Diz-se que fazer referncia a
um valor por meio de um ponteiro fazer uma referncia indireta. Um ponteiro que armazene
o endereo de memria onde est armazenado um dado inteiro, por exemplo, conhecido como
ponteiro para um inteiro.

Declarando um ponteiro
A declarao para um ponteiro parecida com aquela que estamos habituados a
fazer para variveis comuns, exceto que o nome do ponteiro deve ser prefixado
com um asterisco. Considere:

1
2
3
4
5
6
7
8

#include <iostream>
int main()
{
int *pnumber1;
int* pnumber2;
return 0;
}

O pequeno programa acima declara dois ponteiros. Repare que no h diferena


entre manter o astersco perto do nome da varivel ou do tipo. Qualquer forma
que voc escolha, ser aceita pelo compilador.
comum encontrarmos ponteiros nomeados comeando com um p.

Os ponteiros, como quaisquer outras variveis, devem ser declarados antes de serem usados.
int *contPtr, cont;
A declara a varivel contPtr do tipo int * (i.e.. Um ponteiro para um valor inteiro) e lida
como "contPtr um ponteiro para int'' ou "contPtr aponta para um objeto do tipo inteiro
[integer]". Alm disso, a varivel cont declarada como inteira e no como um ponteiro para
um valor inteiro. O * se aplica somente a contPtr na declarao. Quando o * usado dessa
forma em uma declarao, ele indica que a varivel que est sendo declarada um ponteiro. Os
ponteiros podem ser declarados para apontar objetos de qualquer tipo de dados.

cont
7
cont
contPtr

cont

faz

uma

referncia direta a
uma varivel cujo
valor 7. contPtr
faz uma

referncia indireta a uma varivel cujo valor 7.


Fig 7.1 Fazendo referncia direta e indireta a uma varivel.

Os Operadores de Ponteiros
Existem dois operadores especiais para ponteiros: * e &. Os dois operadores so unrios, isto
requerem somente um operando.
O operador & devolve o endereo de memria do seu operando. Por exemplo,
pint = &soma; /* o endereco de soma e carregado em pint */
No exemplo seguinte considere a Tabela 8.1. Aps a execuo do trecho de programa abaixo a
varivel ponteiro p termina com o valor 1000.
p = &num;
O operador * o complemento de &. O operador * devolve o valor da varivel localizada no
endereo que o segue. Por exemplo, o comando
num = *p;
significa que a varivel num recebe o valor apontado por p. Estes operadores no devem ser
confundidos com os j estudados em captulos anteriores. O operador * para ponteiros no tem
nada a ver com o operador multiplicao. O operador ponteiro * unrio e, como o operador &,
tem precedncia maior que do que todos os operadores aritmticos.
.

Вам также может понравиться