Escolar Documentos
Profissional Documentos
Cultura Documentos
Ponteiros
Introduo Cincia da Computao I
Prof. Denis F. Wolf
Memria
2
7 8
int y = x + 6;
printf(%d, x);
int main () {
int x;
x = 10;
return 0;
}
scanf(%d, &x );
Memria
0
Endereo de Memria
9 10 11 12 13 14 15 16 17 18 19 20
16
10
7 8
Ponteiros
9 10 11 12 13 14 15 16 17 18 19 20
Ex: int x;
int *px; /* compilador sabe que px ponteiro */
/* px um ponteiro para inteiro */
scanf(%d, &x );
O que um ponteiro?
5
7 8
9 10 11 12 13 14 15 16 17 18 19 20
7 8
9 10 11 12 13 14 15 16 17 18 19 20
10
10
10
pi
pi
Utilizando Ponteiros
Utilizando Ponteiros
#include <stdio.h>
#include <stdio.h>
int main() {
int x = 10;
int *pi;
pi = &x;
/* *pi igual a 10 */
(*pi)++;
/* *pi igual a 11 */
printf("%d" , x);
return 0;
}
int main() {
int x = 10;
int *pi, *pj;
pi = &x;
pj = pi;
(*pi)++;
(*pj)++;
printf("%d", x);
return 0;
/*
/*
/*
/*
/*
*pi == 10 */
*pj == 10 */
(*pi, *pj, x) == 11 */
(*pi, *pj, x) == 12 */
Escrever 12 */
Referenciando Arrays
Pode-se referenciar os elementos de um array
atravs de ponteiros
Referenciando Elementos
Pode-se utilizar ponteiros e colchetes:
float m[] = { 1.0, 3.0, 5.75, 2.345 };
float *pf;
pf = &m[2];
printf("%f", pf[0]); /* ==> 5.75 */
Passagem de Informaes
Exemplo
#include <stdio.h>
/* Prottipos */
void funcPorVarlor(int a);
void funcPorRefer(int *b);
int main () {
int x = 0, y = 0;
funcPorValor(y);
printf("%d %d\n", x, y);
funcPorRefer(&y);
printf("%d %d\n", x, y);
return 0;
}
15
somar ou subtrair um
inteiro a um ponteiro
(pi int)
incrementar ou
decrementar ponteiros
(pi++, pi--)
comparar ponteiros
( >, >=, <, <=, == )
No vlido
somar ponteiros
(pi + pf)
multiplicar ou dividir
ponteiros
(pi*pf, pi/pf)
Exerccios
1) Faa um programa que leia 2 valores inteiros e
chame uma funo que receba estas 2 variveis e
troque o seu contedo, ou seja, esta rotina
chamada passando duas variveis A e B por
exemplo, e aps a execuo da rotina A conter o
valor de B e B ter o valor de A.
2) Escreva uma funo que dado um nmero real
passado como parmetro, retorne a parte inteira e
a parte fracionria deste nmero.
Exerccios
3) Crie uma funo que recebe os
coeficientes de uma funo do 2o. grau
e retorna as razes sem usar vetor.
Exerccios
5) Faa um programa que acha o maior e o
menor inteiro dentro de um vetor de 10
inteiros.
Obs: usar apenas as variveis a seguir:
int v[10], i, *maior, *menor;