Académique Documents
Professionnel Documents
Culture Documents
Programao Estruturada
II
Prof. Eder Barboza
ederbarbozati@gmail.com
Ponteiros
Definio
Variveis Ponteiros
Aritmtica de Ponteiros
Operadores
Comparaao
Matrizes
Motivao - Ponteiros
Ponteiros:
Definio - Ponteiros
Ponteiro:
uma varivel que contm um endereo de memria.
Ponteiros
Ponteiro
Varivel
Endere
o
Valor
count
Indireo Simples
Variveis Ponteiros
Varivel Ponteiro:
Uma declarao de ponteiro consiste no tipo base,
um * e o nome da varivel.
tipo *nome;
Onde tipo qualquer tipo vlido em C e nome o
nome da varivel ponteiro.
7
Prtica - Ponteiros
Atribuio.
Encontra valores.
Incrementar o ponteiro.
Adio e Subtrao.
Aula 4 - AtribuiodePonteiros.cpp
10
Os operadores de Ponteiros
Operador &:
Operador unrio que devolve o endereo da
memria do seu operando.
Operador *:
Operador unrio que devolve o valor da
varivel localizada no endereo que o segue
( endereo da varivel que foi atribuida ao ponteiro ).
11
Os operadores de Ponteiros
Adio e Subtrao
Podem ser usadas duas operaes aritmticas
com ponteiros: Adio e Subtrao.
Exemplo:
Se p1 um ponteiro do tipo integer com o valor
atual de 2000, aps a operao p1++, o ponteiro
passar a ter o valor de 2002.
Cada vez que ele for incrementado ele ir
apontar para o prximo inteiro cada inteiro utiliza-se
de 2 byte de memria.
12
Os operadores de Ponteiros
Adio e Subtrao
O mesmo verdade para decremento, aps a
expresso p1--, o ponteiro ir receber o valor de 1998.
Resumindo, cada vez que o ponteiro
incrementado ele aponta a prxima posio de
memria do seu tipo base, o mesmo vale para
decremento.
No existe uma limitao somente para
incremento e decremento, pode-se somar ou subtrair
inteiros de ponteiros.
p1 = p1 + 12; o ponteiro p1 aponta para o
dcimo segundo elemento do tipo p1 adiante.
13
Os operadores de Ponteiros
Cada varivel do tipo char utilizase de um byte, logo:
Para cada incremento da varivel
ch, incremeta-se o endereo em 1
byte ( 3000, 3001, 3002, etc ).
14
15
Comparao de Ponteiros
Comparao:
Teste relacionais com >=, <=, > e < so aceitos
entre ponteiros somente quando os dois operandos
so ponteiros.
Outro ponto importante quanto ao tipo
apontado pelos operandos. As duas variveis devem
ser do mesmo tipo.
Variveis ponteiros ainda podem ser testadas
quanto igualdade ( == ) ou desigualdade ( !=).
16
Comparao de Ponteiros
Comparao:
Um exemplo de comparao de dois ponteiros:
17
Ponteiros - Cuidados
As variveis ponteiros devem sempre apontar para
o tipo de dado correto.
Por exemplo:
No atribua a uma varivel ponteiro de um tipo
inteiro o endereo de uma varivel do tipo float.
O programa ir compilar sem nenhuma
mensagem de erro. Alguns compiladores iro produzir
uma mensagem de erro.
No se pode multiplica ou dividir ponteiros.
18
21
22
Exerccios
1 Utilizando ponteiros
Criar um algoritmo que leia nmeros inteiros
e os armazene em vetor de 9 elementos.
O aplicativo ir imprimir todos os elementos
da matriz multiplicado por uma constante
( nmero inteiro ).
Importante: Todos os laos de repetio
devem ser trabalhados utilizando ponteiros.
23
Exercicio
1 Continuao:
Deve ser criada uma funo para
entrar com os nmeros na matriz e
outra para escrever esses nmeros
na matriz.
No poder ser utilizado variveis
globais.
A entrada pode ser feita direto no
aplicativo, no precisa pedir para o
24
Exerccios
2 - Qual a saida desse programa
int vet[]={5,6,8}, *p;
p = vet;
printf("%p %p %d
p,*p+2,*(p+1));
system("PAUSE");
%d
\n",&vet,
25
Exerccios
3 Encontre os erros nesses dois
programas e comente o que estava
errado, o que isso poderia causar e
como deve ser resolvido.
void main() /* esse programa esta errado */
{
int x, *p;
x = 10;
*p = x;
}
26
Exerccios
4 Encontre os erros nesses dois
programas e comente o que estava
errado, o que isso poderia causar e
como deve ser resolvido.
void main() /* esse programa esta errado */
{
int x, *p;
x = 10;
p = x;
printf ("%d", *p);
27
Exerccios No fazer
5 - Faa um programa que leia um conjunto de
valores digitados pelo usurio, armazene os
valores positivos em uma pilha.
Os valores negativos devero ser ignorados.
-> Se o usurio digitar -2 o aplicativo ir finalizar.
-> obrigatrio:
A utilizao de
funes[ pop(),push(),verificanumeronegativo()]
A utilizao de ponteiros.
A utilizao de aritmtica de ponteiros.
No necessrio criar um projeto.
Todo aplicativo pode estar em somente um
28
arquivo.c
29