Buscar

aula_Ponteiros

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

Variáveis do Tipo Ponteiros (apontador/ pointer)
Ponteiro: É um tipo especial de variável cujo conteúdo (valor) é um 
endereço de memória, ou seja, esse tipo de variável aponta para o 
endereço de memória de uma outra variável.
Ponteiro: É um tipo especial de variável cujo conteúdo (valor) é um 
endereço de memória, ou seja, esse tipo de variável aponta para o 
endereço de memória de uma outra variável.
Vantagens do uso de Ponteiros:
• Trabalhar com alocação dinâmica de memória;
• Passar o endereço de uma variável como argumento de uma função. 
Assim, no corpo dessa função será possível manipular diretamente o 
conteúdo da variável, por meio de seu endereço;
• Passar o endereço de uma função para uma outra função;
• Acessar/manipular diretamente a memória do computador.
Vantagens do uso de Ponteiros:
• Trabalhar com alocação dinâmica de memória;
• Passar o endereço de uma variável como argumento de uma função. 
Assim, no corpo dessa função será possível manipular diretamente o 
conteúdo da variável, por meio de seu endereço;
• Passar o endereço de uma função para uma outra função;
• Acessar/manipular diretamente a memória do computador.
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Atenção: O uso incorreto de ponteiros é muito grave e pode ocasionar
sérios problemas (erros difíceis de serem “corrigidos”). O uso de um 
debugger ajuda muito nessa tarefa.
Atenção: O uso incorreto de ponteiros é muito grave e pode ocasionar
sérios problemas (erros difíceis de serem “corrigidos”). O uso de um 
debugger ajuda muito nessa tarefa.
Variáveis (simples ou estruturadas) e funções (código associado) 
possuem uma localização fisíca na memória do computador, ou seja, um 
endereço. 
Variáveis do Tipo Ponteiros (apontador/ pointer)
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Declaração de variáveis do tipo ponteiro
Forma Geral Tipo_de_dado *nome da variavel;Tipo_de_dado *nome da variavel;
Onde: Tipo_de_dado indica o tipo de dado dos objetos que a variável
nome_da_variavel aponta. O asterisco (*) precedendo o nome da
variável indica que ela é do tipo ponteiro.
Onde: Tipo_de_dado indica o tipo de dado dos objetos que a variável
nome_da_variavel aponta. O asterisco (*) precedendo o nome da
variável indica que ela é do tipo ponteiro.
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Exemplos
...
int a, b, c;
int *pa,*pb,*pc;
a = 10, b = 20, c = 30;
pa = &a;
pb = &b;
Pc = &c;
10 3020
1328 53480 701828
1328 53480
a b c
pa pb
701828
pc
pa = “ponteiro para o endereço base da variável (primeiro byte)”,
*pa =“conteúdo da variável apontada por pa”
Atenção!!!Atenção!!!
28 18 2328
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Inicialização de variáveis do tipo de ponteiro
...
int *pa = NULL;
... pa
Da mesma forma que podemos inicializar variáveis no momento de 
sua declaração, também podemos inicializar variáveis do tipo ponteiro. 
Uma boa pratica de programação é inicializar todos os ponteiros no 
momento de sua declaração com a constante simbólica pré-definida NULL
(<stdio.h>). Isso indica que o ponteiro (variável) não aponta para nenhum 
objeto na memória.
Observação: Poderíamos usar 0 (zero) ou 0L (zero longo) no lugar de NULL, 
entretanto o uso dessa constante é mais significativo e recomendado (faz você 
lembrar que a variável é do tipo apontador).
Representação
diagramática
usada para
representar
essa ação
Representação
diagramática
usada para
representar
essa ação
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Exemplos de Códigos e respectivas Funcionalidades
int main(void){
int a = 10, b = 20;
printf(“Antes de troca”);
printf(“%d e %d”,a, b);
Troca(a,b);
printf(“Depois da troca”);
printf(“%d e %d”,a, b);
}
void Troca( int *A, int *B){
int aux;
aux = *A;
*A = *B;
*B = aux;
}
void Troca( int A, int B){
int aux;
aux = A;
A = B;
B = aux;
}
int main(void){
int a = 10, b = 20;
printf(“Antes de troca”);
printf(“%d e %d”,a, b);
Troca(&a,&b);
printf(“Depois da troca”);
printf(“%d e %d”,a, b);
}
O que acontece em ambas as situações ?
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Æ Variáveis do tipo “ponteiro” podem ser usadas em expressões 
aritméticas e boleanas;
Æ Atribuição: Uma variável do tipo ponteiro só pode receber:
• o endereço de uma variável do tipo que ela aponta, ou;
• uma cópia de um outro ponteiro do mesmo tipo.
Observações
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
Aritmética: Operações básicas:
• Soma e subtração (p-3, p+3);
• Incremento e decremento unitário (++p, p++, - -p, p- -);
• Podemos usar os operadores +=, -=; 
p p+1p-1
Aritmética de Ponteiros
Vamos admitir que p aponta para o endereço base (1 byte) de uma 
variável. Como o Compilador sabe o tipo de dado e o tamanho (bytes) 
ocupado por cada tipo, a partir do endereço base, ele pega a quantidade 
de bytes adjacentes necessários.
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
... memória ...
byte
p p+1p-1
Atenção!!! Operações aritméticas sobre ponteiros são diferentes 
das operações aritméticas usuais.
Atenção!!! Operações aritméticas sobre ponteiros são diferentes 
das operações aritméticas usuais.
Aritmética de Ponteiros
Nesse exemplo, estamos supondo que p aponta para o endereço base de 
uma variável que ocupa 4 bytes.
I
n
t
r
o
d
u
ç
ã
o
à
C
i
ê
n
c
i
a
d
a
C
o
m
p
u
t
a
ç
ã
o
–
P
r
o
f
.
 
P
i
t
e
r
i
A
u
l
a
-
P
o
n
t
e
i
r
o
s
(
i
n
t
r
o
d
u
ç
ã
o
)
 
... memória ...
byte
... continua

Outros materiais