18.00-ponteiros-1
DESCRIPTION
Ponta da ads fio eqa adsfjTRANSCRIPT
-
INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECNOLOGIACAMPUS NATAL - CENTRAL
DIRETORIA DE EDUCAO E TECNOLOGIA DA INFORMAOAv. Sen. Salgado Filho, 1559, Natal/RN, 59015-000. Fone/FAX (084) 4005-2637
E-mail: [email protected] - 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 MemriaJ 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 1242293621 ...
1
-
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:
PonteirosEm 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.
2
-
Declarando PonteirosA 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 intchar *c; //declara um ponteiro para um charfloat *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 PonteiroDesferenciar 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:
3
-
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;
4
-
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.
5