Você está na página 1de 12

Como declarar, inicializar e

usar ponteiros em C - A
constante NULL
Fica tranqilo que agora voc vai
passar, no se desespere, confia
em Deus, e faz a tua parte,
estude...

Como declarar ponteiros em C ?


Para declarar um ponteiro, ou apontador, em C basta
colocarmos um asterisco - * - antes do nome desse ponteiro.
Sintaxe:
tipo *nome_do_ponteiro;
Por exemplo:
int *ponteiro_pra_inteiro;
float *ponteiro_pra_float;
char *ponteiro_pra_char;

Na verdade, esse asterisco pode ser encostado no tipo


ou entre o tipo e o nome.
Aqui, se voc estiver com os conceitos de ponteiro na
cabea, pode surgir uma pergunta.
Se os ponteiros so tipos que armazenam endereo,
e endereo so apenas nmeros, por qu ter que
declarar ponteiros com os tipos (int, float, char etc) ?
A resposta dada no artigo passado, em que falamos
sobre o tamanho que as variveis ocupam em
memria.
Vimos que as variveis ocupam posies vizinhas e
contguas (em seqncia) de memria (exceto, claro, o
tipo char, que ocua s 1 byte, ou seja, s um bloco).
Vamos pegar o exemplo da varivel inteira. Em minha
mquina, ela ocupa 4 bytes.
Ou seja, 4 blocos de memria, cada bloco com um
endereo.

Mas o ponteiro armazenaapenas umendereo de


memria, e no 4.
Ento, o ponteiroir sempre armazenar o
endereo do primeiro bloco, do primeiro byte.
E os outros? U, se o C sabe quantos bytes cada
varivel ocupa, que elas so blocos vizinhos de
memria e o ponteiro sabe o endereo do primeiro
bloco, ele vai saber dos outros tambm!
por isso que precisamos dizer o tipo de varivel,
antes de declarar o ponteiro.
Se for um ponteiro de inteiro, estamos dizendo:
Ponteiro, guarde esse endereo e os prximos 3,
pois o inteiro tem 4 bloco.
Se for um double: Ponteiro, armazene o primeiro
endereo, e saiba que os prximos 7 blocos so
dessa mesma varivel.

Ponteiros e Vetores em C
J explicamos sobre a relao dos ponteiros com os
diversos tipos de blocos de memria, de cada varivel.
E a relao dos ponteiros com os vetores, que possuem
diversas variveis?
Pois bem, eles tm (ponteiros e vetores) possuem uma
relao especial.
Quando declaramos um vetor, estamos declarando um
conjunto de variveis tambm contguas, e cada uma
dessas variveis ocupam vrios bytes (ou s 1 byte, se
for char). Ento, um vetor um conjunto maior ainda de
bytes, de blocos de memria.
Como voc sabe, quando apontamos um ponteiro para
uma varivel, esse ponteiro armazena o endereo do
primeiro byte, do menor endereo, da varivel.
A relao com vetores anloga:o nome do vetor ,
na verdade, o endereo do primeiro elemento
desse vetor.

Ou seja, se declararmos um vetor de nomevetor, no


importando o nmero de elementos, se imprimirmos o
nomevetordentro de um printf, veremos o endereo da
primeira varivel daquele vetor.
Podemos ver um vetor como um ponteiro.
Isso explica o fato de que quando passamos um vetor
para uma funo, essa funo altera de fato o valor do
vetor. Isso ocorre pois no estamos passando uma cpia
do vetor (como acontece com as variveis).
Isso ocorre porque quando passamos o nome do vetor,
estamos passando um ponteiro pra funo.
Ou seja, estamos passando um endereo, onde a funo
vai atuar.
E endereo de memria o mesmo, dentro ou fora de
uma funo.
Rode o seguinte exemplo para se certificar do que foi

Exemplo de cdigo em C
Crie um programa que mostre que o nome de um vetor , na
verdade, um ponteiro para a primeira posio que o vetor ocupa na
memria. Ou seja,um vetor sempre aponta para o elemento 0.

Ou seja, para declararmos um


ponteiroptrpara um vetorvet[ ],
fazemos:
ptr = vet;
Pois o nome do vetor um ponteiro
(que no muda) para o primeiro
elemento.
Ento poderamos fazer assim
tambm:
ptr = &vet[0];

Como inicializar um ponteiro em C A constante NULL


J vimos como declarar um ponteiro, ento hora de fazer com que
eles cumpram sua misso.
Vamos fazer os ponteiros apontarem.
Lembra que ensinamos como checar o endereo de uma varivel ou
vetor apenas usando o smbolo & antes da varivel?
Agora vamos fazer isso novamente, mas para pegar esse endereo
e armazenar em um ponteiro.
Por exemplo, se quisermos armazenar o endereo do inteiro
numerono ponteiro numeroPtr, fazemos:
int numero = 5;
int *numeroPtr = №
Pronto, agora nosso ponteiro est apontando para a varivelnumero,
pois o ponteiro guardou o endereo do inteiro na sua posio de
memria.
Muito cuidado! Ponteiros armazenam endereos, e no
valores. Ou seja, se fizer:
int *numeroPtr = numero;

Estar comentendo um erro!


sempre bom inicializarmos os ponteiros, pois seno eles podem vir
com lixo e voc se esquecer, posteriormente, de inicializar. Ento,
quando for usar, pensar que est usando o ponteiro de modo
correto, mas estar usando o ponteiro com ele apontando para um
lixo (endereo qualquer de memria).
Uma boa prtica apontar os ponteiros para a primeira posio de
memria, que conhecida comoNULL. Sempre que terminar de usar
um ponteiro, coloque ele pra apontar para a posio NULL. Para fazer
isso, faa:
tipo *nome_do_ponteiro = NULL;
Exemplo de cdigo: Como usar ponteiros
Crie um programa em C que declara um inteiro e uma varivel do
tipo double. Em seguida, crie dois ponteiros apontando para essas
variveis e mostre o endereo de memria das variveis, e mostre o
endereo de memria que cada ponteiro armazenou.
Por fim, coloque esses ponteiros para a primeira posio (NULL), de
memria.
Para saber o endereo de uma varivel dentro do printf, colocamos o
%d e depois &nome_variavel.
Para saber que endereo um ponteiro armazena no printf, tambm
colocamos o %d entre as aspas, e fora colocamos apenas o nome do

Veja como ficou nosso cdigo sobre como fazer esse


programa em C:

Boa sorte! E boas provas, que Deus te abenoe,vai da


tudo certo!

Você também pode gostar