Buscar

02 - Ponteiros- Programação Avancada

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 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

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 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

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 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

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação II
Ponteiros
Prof. Raphael Vidal
Raphaelvidal9.webnode.com
Raphael.r.vidal@gmail.com
Endereços - Bytes
• A memória de qualquer computador é uma sequência de 
bytes. Os bytes são numerados sequencialmente. O 
número do byte é o seu endereço (= address).
•
Endereços - Bytes
• Cada objeto na memória do computador ocupa um certo
número de bytes consecutivos. Ex: um char ocupa 1
byte, um int ocupa 4 bytes e um double ocupa 8 bytes.
• Cada objeto na memória do computador tem um
endereço. Na maioria dos computadores, o endereço de
um objeto, é o endereço do seu primeiro byte.
Endereços
• Por exemplo:
char c; 
int i; 
struct { 
int x, y; 
} ponto; 
int v[4];
Depois das declarações, os endereços das variáveis poderiam ser:
c 89421
i 89422
ponto 89426
v[0] 89434
v[1] 89438
v[2] 89442
V[3] 89446
(exemplo fictício) 
Endereços – Operador de endereço
• O endereço de uma variável é dado pelo operador &,
chamdo de “operador de referência” ou “operador de
endereço” (Não confundir esse uso de "&" com o
operador lógico and, que em C se escreve "&&".).
• Se i é uma variável então &i é o seu endereço. No
exemplo anterior, &i vale 89422 e &v[3] vale
89446.
• Exemplo:
• O segundo argumento da função de biblioteca scanf é o endereço
da posição na memória onde devem ser depositados os objetos
lidos no dispositivo padrão de entrada:
int i;
scanf("%d", &i);
Endereços – Variável de memória
• Uma variável de memória está estruturada da seguinte
forma:
• Exemplo:
int c = 10;
endereço
(left value)
valor
(right value)
0065FF53 10
Ponteiros
• Um ponteiro (= apontador = pointer) é um tipo especial 
de variável que armazena endereços.
• Um ponteiro pode ter o valor especial NULL, que não é o 
endereço de lugar algum. A constante NULL está definida 
no arquivo-interface stdlib e seu valor é 0 na maioria dos 
computadores. 
• Se um ponteiro p armazena o endereço de uma variável 
i, podemos dizer "p aponta para i" ou "p é o endereço 
de i" (querendo dizer "o ponteiro p aponta para i" no 
primeiro caso e "o valor de p é o endereço de i" no 
segundo).
Ponteiros
• Se um ponteiro p tem valor diferente de NULL então *p é 
o valor do objeto apontado por p (Não confunda esse uso 
de "*" com o operador de multiplicação!).
• Por exemplo, se i é uma variável e p é igual a &i então 
dizer "*p" é o mesmo que dizer "i".(valor de i)
• Acima, um ponteiro p, armazenado no endereço 90001,
contém o endereço de um inteiro. Em seguida, a
representação esquemática da situação.
Ponteiros
• Há vários tipos de ponteiros: ponteiros para caracteres,
ponteiros para inteiros, ponteiros para ponteiros para
inteiros, ponteiros para registros etc.
• O compilador faz questão de saber de que tipo de
ponteiro você está falando:
• Para declarar um ponteiro p para um inteiro, faça int *p;
• Para declarar um ponteiro p para um registro cel, faça struct
cel *p;
• Um ponteiro r para um ponteiro que apontará um inteiro é
declarado assim: int **r;
• É importante citar que todo ponteiro deve ser
inicializando antes de ser utilizado para que não
aponte para um endereço de memória indesejado ou que
esteja sendo utilizado por outro aplicativo.
Ponteiro para inteiro - exemplo:
•
Obs: para exibição de ponteiros (endereços) utilize %p
Execução do exemplo anterior
Ponteiro para inteiro – exemplo 2
• Exemplos:
int main() {
int i = 10 ;
int *p ;
p = &i ;
*p = 5 ; //valor inserido em i através de p
printf ("%d %d %p", i, *p, p);
return 0;
}
•É de esperar que os valores de i e de *p sejam iguais, já que p aponta para i.
O terceiro valor é o endereço de memória onde está i (e, consequentemente, é
o próprio valor de p), que será diferente em cada sistema.
Ponteiros para registros
Obs: para acessar as variáveis do registro utilize: 
-> (seta)
Ponteiros para Vetores
• Em C, os elementos de um vetor são sempre guardados
sequencialmente, a uma distância fixa um do outro. Com
isso, é possível facilmente passar de um elemento a
outro, percorrendo sempre uma mesma distância para
frente ou para trás na memória. Dessa maneira, podemos
usar ponteiros e a aritmética de ponteiros para percorrer
vetores.
• Na verdade, vetores são ponteiros ― um uso particular
dos ponteiros.
Ponteiros para Vetores
• Exemplo:
Ponteiros para Vetores
• Entendendo o código anterior:
• Começamos declarando um vetor com três elementos;
• Depois, criamos um ponteiro para esse vetor. Mas repare que não
colocamos o operador de endereço em vetorTeste. Fazemos
isso porque um vetor já representa um endereço, como pode-se
verificar pelo resultado da primeira chamada a printf().
• Se o ponteiro aponta para o vetor, o próximo inteiro na memória
será o próximo elemento do vetor!
• De fato, em C as duas formas *(ptr+n) e ptr[n] são
equivalentes.
Ponteiros para Vetores
• Entendendo o código anterior:
• Não é necessário criar um ponteiro para usar essa sintaxe. Como
já vimos, o vetor em si já é um ponteiro, de modo que qualquer
operação com ptr será feita igualmente com vetorTeste. Todas
as formas abaixo de acessar o segundo elemento do vetor são
equivalentes:
vetorTeste[1];
*(vetorTeste + 1);
ptr[1];
*(ptr + 1);
Ponteiros
• Ponteiros podem ser utilizados para:
• Passagem de parâmetro por referência (End. de 
memória)
• Alocação Dinâmica
• Arquivos
• Listas encadeadas
Resumo
• *p = Valor que está no endereço apontado
• p = endereço apontado
• &p = endereço do ponteiro
• p[i] = valor dentro do vetor
• &p[i] = endereço da posição do vetor
• == apontam para a mesma posição
• != apontam para posições diferentes 
• > >= < <= qual aponta para a posição mais alta
Exercício (todas as operações com 
ponteiros !)
1 - Crie um programa onde receba dois valores inteiros e armazene em
variáveis (a, b). Utilize ponteiros para realizar a multiplicação entre
eles. O resultado deve ser armazenado em uma variável de nome
result. O valor de result deve ser apresentado através de um ponteiro.
Todos os endereços das variáveis e ponteiros devem ser
demonstradas ao final do programa
2 - Reutilize o programa anterior demonstrando na tela se o valor da
variável A é maior que o valor de B. (vice versa) ou se são iguais.
3 – (Utilize Registros) Escrever um programa que cadastre o nome, a
matrícula e duas notas de um aluno. Em seguida imprima a matrícula,
o nome e a média. Informe também se o aluno foi aprovado ou
não.(todas as operações e impressões devem ser feitas com
ponteiros)
Exercícios
4 - Assumindo que o endereço da variável x foi atribuído a um ponteiro
px, escreva uma expressão que não usa x e divida x por 5.
5 - Escreva um programa que simule contas bancárias, com as
seguintes especificações:
• Ao iniciar o programa vamos criar uma conta bancária. o Cada conta
terá o nome e o CPF do cliente associado a ela. o No ato da criação
da conta o cliente precisará fazer um depósito inicial.
• Após as contas serem criadas, o sistema deverá possibilitar
realizações de saques ou depósitos nas contas. o Sempre que uma
operação de saque ou depósito seja realizada, o sistema deverá
imprimir o nome do titular e o saldo final
Obrigado!!!

Continue navegando