Buscar

Programação de Computadores 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

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

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ê viu 3, do total de 22 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

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

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ê viu 6, do total de 22 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

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

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ê viu 9, do total de 22 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

Prévia do material em texto

Universidade Estadual do Centro Oeste - UNICENTRO
Departamento de Ciência da Computação - DECOMP
Programação de Computadores II
PonteirosPonteiros
Variáveis Ponteiros (1)
� O primeiro passo para entender ponteiros é visualizar o
que eles representam em nível de máquina.
� Nos computadores mais modernos a memória é dividida
em bytes, sendo que cada byte é dividido em bits.
� Cada byte têm um endereço único.
2
Variáveis Ponteiros (2)
� Se existem n bytes na memória. Pode-se pensar em
endereços como números que estão entre 0 e n-1.
3
Variáveis Ponteiros (3)
� Cada variável em um programa ocupa um ou mais bytes 
de memória.
� O endereço do primeiro byte é dito ser o endereço da 
variável.
� Na figura seguinte, o endereço da variável i é 2000.
4
Variáveis Ponteiros (4)
� Endereços podem ser armazenados em variáveis especiais
denominadas ponteiros.
� Quando armazena-se o endereço da variável i na
variável ponteiro p, diz-se que p “aponta” para i.
� Uma representação gráfica:
5
Declaração de variáveis ponteiros (1)
� Quando uma variável ponteiro é declarada, seu nome
deve ser precedido por um asterisco:
int *p;
� p é uma variável ponteiro que aponta para um objeto
do tipo int.do tipo int.
� Usa-se o termo objeto em vez de variável pois p
pode apontar para uma área de memória que não
pertence a uma variável.
6
Declaração de variáveis ponteiros (2)
� Variáveis ponteiros podem aparecer em declarações junto
com outras variáveis:
int i, j, a[10], b[20], *p, *q;
� C requer que toda variável ponteiro aponte somente para
objetos de um tipo particular (o tipo referenciado):
int *p; /* aponta somente para inteiros */int *p; /* aponta somente para inteiros */
double *q; /* aponta somente para doubles */
char *r; /* aponta somente para caracteres */
float *som /* aponta somente para floats */ 
� Não existem restrições em relação a quais tipos podem ser
referenciados.
7
Operadores de endereço e indireção
� C fornece um par de operadores projetados
especificamente para uso com ponteiros.
� Para encontrar o endereço de uma variável, usa-se & 
(operador de endereço).
� Para obter acesso ao objeto que um ponteiro aponta, usa-se * 
(operador de indireção ou de desreferenciação).(operador de indireção ou de desreferenciação).
8
Operador de endereço (1)
� A seguir está declarada uma variável ponteiro que é capaz
de apontar para um objeto do tipo int, esta variável
reserva espaço para um ponteiro, porém, o ponteiro não
aponta para um objeto em particular.
int *p; /* p não aponta para nada em particular */
� É fundamental inicializar a variável ponteiro p
antes de usá-la.
9
Operador de endereço (2)
� Um modo de inicializar uma variável ponteiro é
atribuir para a variável ponteiro o endereço de uma
variável:
int i, *p;
…
p = &i;p = &i;
� Atribuição do endereço de i à variável p faz p
apontar para i:
10
Operador de endereço (3)
� Também é possível inicializar uma variável ponteiro
quando esta variável é declarada: 
int i;
int *p = &i;
� A declaração de i pode ser realizada junto com a � A declaração de i pode ser realizada junto com a 
declaração e inicialização de p:
int i, *p = &i;
11
Operador de indireção (1)
� Uma vez que uma variável ponteiro aponta para um objeto,
pode-se usar o operador * (indireção) para acessar o que está
armazenado no objeto.
� Se p aponta para i, pode-se imprimir o valor de i como está
descrito a seguir:descrito a seguir:
printf("%d\n", *p);
12
Operador de indireção (2)
� Como p aponta para i, *p é um alias de i.
� *p tem o mesmo valor de i.
� Alterar o valor de *p altera o valor de i.
� O exemplo do próximo slide ilustra a equivalência de *p
e i.e i.
13
Operador de indireção (3)
� p = &i;
� i = 1;
printf("%d\n", i); /* imprime 1 */printf("%d\n", i); /* imprime 1 */
printf("%d\n", *p); /* imprime 1 */
*p = 2;
printf("%d\n", i); /* imprime 2 */
printf("%d\n", *p); /* imprime 2 */
14
Operador de indireção (4)
� Usar uma variável ponteiro não inicializada causa
comportamento indefinido:
int *p;
printf("%d", *p); /*** ERRADO ***/
� Atribuir um valor para *p é particularmente perigoso, ou seja, 
atribuir um valor para uma variável ponteiro não inicializada:atribuir um valor para uma variável ponteiro não inicializada:
int *p;
*p = 1; /*** ERRADO ***/
15
Atribuição de Ponteiros (1)
� C permite o uso do operador de atribuição para copiar
ponteiros do mesmo tipo.
� A seguinte declaração de variáveis será usada para exemplificar
as atribuições de ponteiros:
int i, j, *p, *q;int i, j, *p, *q;
� Exemplo de atribuição de ponteiros:
p = &i;
16
Atribuição de Ponteiros (2)
� Outro exemplo de atribuição de ponteiro:
q = p;
q agora aponta para o mesmo lugar que p:
17
Atribuição de Ponteiros (3)
� Se p e q apontam para i, pode-se alterar i ao atribuir um 
novo valor para *p ou *q:
*p = 1;
*q = 2;*q = 2;
� Qualquer número de variáveis ponteiros podem apontar para
o mesmo objeto.
18
Atribuição de Ponteiros (4)
� Tenha cuidado para não confundir
q = p;
com
*q = *p;
� A primeira declaração é uma atribuição de ponteiro, mas a 
segunda não.segunda não.
� O exemplo do próximo slide mostra o efeito da segunda
declaração.
19
Atribuição de Ponteiros (5)
p = &i;
q = &j;
i = 1; 
*q = *p;
20
Exemplo de programa – usando o operador de endereço (1)
#include <stdio.h>
int main(void){
int a = 1, b = 2, c = 3;
printf("O endereco de a ‚ %d o valor de a ‚ %d\n", &a, a);
printf("O endereco de b ‚ %d o valor de b ‚ %d\n", &b, b);printf("O endereco de b ‚ %d o valor de b ‚ %d\n", &b, b);
printf("O endereco de c ‚ %d o valor de c ‚ %d\n", &c, c);
return 0;
}
21
Exemplo de programa – usando variáveis ponteiro (2)
Este programa ilustra o uso de variáveis ponteiro. Uma variável ponteiro (i_ponteiro) é declarada
e o endereço de uma variável inteira (a) é atribuído a ela. O programa então usa a variável
ponteiro (i_ponteiro) para alterar, exibir e atribuir o valor da variável inteira (a).
#include <stdio.h>
int main(void) {
int a = 1, b = 2, *i_ponteiro;
i_ponteiro = &a; /* Atribui um endereco a i_ponteiro */
printf("O valor da variavel a: %d\n", a);printf("O valor da variavel a: %d\n", a);
*i_ponteiro = 5; /* Altera o valor apontado por i_ponteiro para 5 */
printf("O valor da variavel a: %d\n", a);
printf("O valor apontado por i_ponteiro: %d\n", *i_ponteiro);
b = *i_ponteiro; /* b recebe o valor apontado por i_ponteiro */
printf("O valor de b: %d\n", b);
printf("Valor de i_ponteiro: %d\n", *i_ponteiro);
return 0;
}
22

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes