Buscar

Ponteiros em C

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

Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros
Prof. DSc. Newton Spolaôr
Disciplina Computação I
Bacharelado em Ciência da Computação
Universidade Estadual do Oeste do Paraná (UNIOESTE)
Brasil
01/09/2016
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Sumário
1 Introdução
2 Ponteiros e vetores em C
3 Exercícios
4 Considerações finais
Newton Spolaôr Ponteiros 2
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Aula anterior em um breve olhar
Na aula anterior foram abordadas estruturas de controle
em C
Estruturas condicionais if e switch ... case
Estruturas de repetição for e while
Nesta aula são apresentados conceitos iniciais referentes
ao tipo de dados ponteiro
Newton Spolaôr Ponteiros 3
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
Uma variável do tipo ponteiro é capaz de armazenar um
endereço de memória
Para começar a falar sobre a importância de ponteiros,
imagine que a memória seja uma sequência de caixas, em
que cada caixa pode armazenar um dado
Figura: Representação de memória como sequência de 12 caixas
Newton Spolaôr Ponteiros 4
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
Uma variável do tipo ponteiro é capaz de armazenar um
endereço de memória
Para começar a falar sobre a importância de ponteiros,
imagine que a memória seja uma sequência de caixas, em
que cada caixa pode armazenar um dado
Figura: Cada caixa pode ser associada a um endereço de memória
Newton Spolaôr Ponteiros 5
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Exemplo de programa em C [1]
#include <stdio.h>
int main()
{
int x;
x = 10;
int y = x + 6;
printf("%d",x); //escrita de um inteiro
return 0;
}
Qual é o valor impresso na tela?
Newton Spolaôr Ponteiros 6
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
Como x poderia ser lido do teclado?
Resposta: scanf("%d",&x);
Newton Spolaôr Ponteiros 7
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
Como x poderia ser lido do teclado?
Resposta: scanf("%d",&x);
Newton Spolaôr Ponteiros 7
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
A função scanf pra leitura de dados será abordado em
aula futura
Por ora, convém destacar que ela permite ler um dado do
teclado para x , sendo x um parâmetro passado por
referência
Em C, é necessário indicar explicitamente o endereço de
um parâmetro passado por referência (no Pascal, não era
necessário)
Para tanto, deve-se adicionar o & antes de x para obter o
endereço de x
No futuro também falaremos sobre passagem de
parâmetro por referência em C
Newton Spolaôr Ponteiros 8
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
A função scanf pra leitura de dados será abordado em
aula futura
Por ora, convém destacar que ela permite ler um dado do
teclado para x , sendo x um parâmetro passado por
referência
Em C, é necessário indicar explicitamente o endereço de
um parâmetro passado por referência (no Pascal, não era
necessário)
Para tanto, deve-se adicionar o & antes de x para obter o
endereço de x
No futuro também falaremos sobre passagem de
parâmetro por referência em C
Newton Spolaôr Ponteiros 8
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
A função scanf pra leitura de dados será abordado em
aula futura
Por ora, convém destacar que ela permite ler um dado do
teclado para x , sendo x um parâmetro passado por
referência
Em C, é necessário indicar explicitamente o endereço de
um parâmetro passado por referência (no Pascal, não era
necessário)
Para tanto, deve-se adicionar o & antes de x para obter o
endereço de x
No futuro também falaremos sobre passagem de
parâmetro por referência em C
Newton Spolaôr Ponteiros 8
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
A função scanf pra leitura de dados será abordado em
aula futura
Por ora, convém destacar que ela permite ler um dado do
teclado para x , sendo x um parâmetro passado por
referência
Em C, é necessário indicar explicitamente o endereço de
um parâmetro passado por referência (no Pascal, não era
necessário)
Para tanto, deve-se adicionar o & antes de x para obter o
endereço de x
No futuro também falaremos sobre passagem de
parâmetro por referência em C
Newton Spolaôr Ponteiros 8
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
A função scanf pra leitura de dados será abordado em
aula futura
Por ora, convém destacar que ela permite ler um dado do
teclado para x , sendo x um parâmetro passado por
referência
Em C, é necessário indicar explicitamente o endereço de
um parâmetro passado por referência (no Pascal, não era
necessário)
Para tanto, deve-se adicionar o & antes de x para obter o
endereço de x
No futuro também falaremos sobre passagem de
parâmetro por referência em C
Newton Spolaôr Ponteiros 8
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Motivação para ponteiros [1]
Por ora, destaca-se que a função scanf vai receber o
valor 4 como endereço de x
Newton Spolaôr Ponteiros 9
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Ponteiros em C [1]
Como mencionado, um ponteiro é uma variável que
contém (armazena) um endereço de memória
Declaração
tipo_dado_apontado * nome_variável;
Obs.: o uso do asterisco é obrigatório para declarar uma
variável ponteiro
Exemplo
int x;
int *px; //px é um ponteiro para um inteiro
Newton Spolaôr Ponteiros 10
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Ponteiros em C [1]
Como mencionado, um ponteiro é uma variável que
contém (armazena) um endereço de memória
Declaração
tipo_dado_apontado * nome_variável;
Obs.: o uso do asterisco é obrigatório para declarar uma
variável ponteiro
Exemplo
int x;
int *px; //px é um ponteiro para um inteiro
Newton Spolaôr Ponteiros 10
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
O que é um ponteiro? [1]
#include <stdio.h>
int main()
{
int y;
int x=10;
int *px;
px = &x;
printf("&xpossui %p e px possui %p",&x,px);
return 0;
}
O que é impresso na tela?
Newton Spolaôr Ponteiros 11
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
O que é um ponteiro? [1]
Nesse cenário, deveria ser impresso na tela o seguinte
&x possui 0x4 e px possui 0x4
Newton Spolaôr Ponteiros 12
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
O que é um ponteiro? [1]
Para receber o dado apontado pelo ponteiro, é necessário
usar o operador *
Exemplo: y = *px; //y é uma variável int
Newton Spolaôr Ponteiros 13
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
O que é um ponteiro? [1]
Figura: Note que y agora contém o mesmo dado que x , graças ao
ponteiro px
Newton Spolaôr Ponteiros 14
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [1]
#include <stdio.h>
int main() {
int x = 10;
int *px;
px = &x; // *px é igual a 10
(*px)++; // *px é igual a 11
printf("%d" , x); //escreve 11
return 0;
}
Após a atribuição px = &x;, ao alterar *px mudamos
também o conteúdo de x
Newton Spolaôr Ponteiros 15
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [1]
#include <stdio.h>
int main() {
int x = 10;
int *px, *px2;
px = &x; // *px é igual a 10
px2 = px;// *px2 é igual a 10
(*px)++; // *px, *px2 e x são iguais a 11
(*px2)++;// *px, *px2 e x são iguais a 12
printf("%d" , x); //escreve 12
return 0;
}
Newton Spolaôr Ponteiros 16
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [2]
#include <stdio.h>
int main() {
int x;
int *px;
x = 1;
*px = 1;
printf("%d" , *px);
return 0;
}
Há algum possível problema nesse código?
Sim, pois px não aponta para um local válido de memória
Newton Spolaôr Ponteiros 17
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [2]
#include <stdio.h>
int main() {
int x;
int *px;
x = 1;
*px = 1;
printf("%d" , *px);
return 0;
}
Há algum possível problema nesse código?
Sim, pois px não aponta para um local válido de memória
Newton Spolaôr Ponteiros 17
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [2]
#include <stdio.h>
int main() {
int x;
int *px;
x = 1;
*px = 1;
printf("%d" , *px);
return 0;
}
Uma representação gráfica ajuda a entender isso
A seguir, uma possível solução é apresentada
Newton Spolaôr Ponteiros 18
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Usando um ponteiro [2]
#include <stdio.h>
int main() {
int x;
int *px; //px não aponta para local válido
x = 1;
px = &x; //px agora aponta para x
*px = 1; //local apontado por px recebe 1
printf("%d" , *px); //imprime 1
return 0;
}
Newton Spolaôr Ponteiros 19
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Aula anterior em um breve olhar
Motivação para ponteiros
Objetivo desta aula
Objetivo desta aula
Apresentar ponteiros em C
Newton Spolaôr Ponteiros 20
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros e vetores
Sumário
1 Introdução
2 Ponteiros e vetores em C
3 Exercícios
4 Considerações finais
Newton Spolaôr Ponteiros 21
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros e vetores
Ponteiros e vetores em C [1]
Para começar a exercitar ponteiros, podemos considerar a
relação que eles possuem com vetores
O conceito de vetor, já introduzido com Pascal, será
desenvolvido em C em aula futura
Por ora, é suficiente...
Recordar que vetor é uma sequência de elementos do
mesmo tipo de dados
Saber que a iniciação de um vetor v de 3 reais em C pode
ser realizada como ilustrado no código
double v [ ] = {1.0, 3.0, 5.75};
Newton Spolaôr Ponteiros 22
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros e vetores
Ponteiro para acessar vetor [1]
#include <stdio.h>
int main() {
double v[] = {1.0,3.0,5.75}; //iniciação de v
double *pv; //ponteiro para um double
pv = &v[0]; // *pv é igual a 1.0
printf("%lf" , *pv); //escreve 1.0
return 0;
}
Newton Spolaôr Ponteiros 23
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros e vetores
Ponteiro para acessar vetor [1]
Quando um ponteiro é usado para acessar um vetor, é
possível também usar colchetes para acessar elementos
do vetor
Em outras palavras, ...
Assim como v[0] indica que estamos acessando o 1o
elemento do vetor v ...
O código pv[0] indica que estamos acessando o 1o
elemento da sequência apontada por pv
Newton Spolaôr Ponteiros 24
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Ponteiros e vetores
Ponteiro para acessar vetor [1]
#include <stdio.h>
int main() {
double v[] = {1.0,3.0,5.75}; //iniciação de v
double *pv; //ponteiro para um double
pv = &v[0]; // *pv é igual a 1.0
printf("%lf" , pv[0]); //escreve 1.0
return 0;
}
Como poderíamos acessar o 2o elemento de v usando o
ponteiro pv?
Newton Spolaôr Ponteiros 25
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Sumário
1 Introdução
2 Ponteiros e vetores em C
3 Exercícios
4 Considerações finais
Newton Spolaôr Ponteiros 26
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Exercício 1
Escolha um dos programas em C já construídos nessa
disciplina (se não encontrar, crie um agora)
Após, modifique esse programa para imprima na tela o
endereço de cada variável utilizada
Para escrever o endereço de uma variável x , use a função
printf("%p",&x)
Quais são os endereços exibidos?
Newton Spolaôr Ponteiros 27
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Exercício 2 [1]
Faça um programa que acha o maior e o menor valor
dentro de um vetor de 10 inteiros previamente iniciado
Após, imprima na tela o maior e o menor valor usando a
função printf("%d",...), em que ... é substituído
por cada um dos ponteiros
Obs.: Para esse exercício, use somente as variáveis...
int v[10], i;
int *maior, *menor;
Newton Spolaôr Ponteiros 28
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Exercício 3
Crie um programa que, a partir de um vetor de 5 reais
previamente iniciado, realize as seguintes operações
Dobrar cada elemento do vetor
A partir do vetor anterior, some mais uma unidade para
cada elemento
Para acessar os elementos do vetor, use somente
ponteiros para exercitá-los
Newton Spolaôr Ponteiros 29
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Considerações finais
1 Introdução
2 Ponteiros e vetores em C
3 Exercícios
4 Considerações finais
Newton Spolaôr Ponteiros 30
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Considerações finais
Nesta aula foi apresentado o conceitode ponteiro, um
endereço de memória
Esse conceito será ainda explorado no futuro, por
exemplo, para passagem de parâmetros por referência e
para alocação dinâmica de dados
Na próxima aula, vamos abordar uma função que
necessita de um endereço de memória como parâmetro:
scanf
Newton Spolaôr Ponteiros 31
Introdução
Ponteiros e vetores em C
Exercícios
Considerações finais
Contato
newtonsp.unioeste@gmail.com
Newton Spolaôr Ponteiros 32
Referências
[1] Denis F. Wolf. Algoritmos.
http://wiki.icmc.usp.br/index.php/Scc-101, 2014. Notas
didáticas.
[2] Stackoverflow. Can’t assign values to variable and pointer
[duplicate].
http://stackoverflow.com/questions/11297576/cant-assign-
values-to-variable-and-pointer,
2012.
Newton Spolaôr Ponteiros 32
	Introdução
	Aula anterior em um breve olhar
	Motivação para ponteiros
	Objetivo desta aula
	Ponteiros e vetores em C
	Ponteiros e vetores
	Exercícios
	Considerações finais

Outros materiais