atribuições: valores, ponteiros e...
TRANSCRIPT
![Page 1: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/1.jpg)
Atribuições:Valores, Ponteiros e Referências
Estruturas de DadosProf. Vilson Heck Junior
![Page 2: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/2.jpg)
Sobre Variáveis
• Aprendemos, em introdução àprogramação, que possuem 3 partes maisimportantes:
– Nome;
– Tipo de Dado;
– Valor;
• Aprendemos,em estruturas de dados, queelas possuem outra parte importante:
– Endereço/localização na memória!
![Page 3: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/3.jpg)
Sobre Variáveis
• Com uma variável, precisamos nospreocupar apenas com os três elementosbásicos, pois é o sistema operacional quemse encarrega de gerenciar a posição dememória;
• Mas em alguns momentos, precisaremostrabalhar com o posicionamento dos dadosna memória;
• Para isto, serão introduzidos os termos:– Ponteiros e Referências.
![Page 4: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/4.jpg)
OS VALORES
Atribuições:
Valores, Ponteiros e Referências
![Page 5: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/5.jpg)
Valores
• O Valor de uma variável, é o seuconteúdo;
• Quando fazemos uma atribuição:
int x = 10;
int y = x;
– Estamos copiando um determinado valor,ou o valor de uma outra variável, paradentro da primeira.
![Page 6: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/6.jpg)
10
10
![Page 7: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/7.jpg)
Valores
• A operação de atribuição (sinal deigualdade “=“) é a responsável porefetuar a cópia destes valores;
• Todas as variáveis de tipo de dadoprimitivo (int, double, etc..) fazematribuição de valor;
• Apesar de não ser um tipo de dadoprimitivo, a String também irá fazeratribuição por valor;
![Page 8: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/8.jpg)
OS PONTEIROS
Atribuições:
Valores, Ponteiros e Referências
![Page 9: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/9.jpg)
Ponteiros
• Vimos anteriormente que qualquervariável possui um endereço namemória;
• Este endereço indica a posição damemória onde se encontra o Valor davariável;
![Page 10: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/10.jpg)
Ponteiros
• Imagine agora um novo tipo de dadopara variáveis.
– Este tipo de dado, cujos valores não sãonúmeros, nem textos e nem valores lógicos,mas sim, endereços de memória!
– Um ponteiro é uma variável que armazena oendereço de memória onde se encontraoutra variável.
![Page 11: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/11.jpg)
Ponteiros
• Um detalhe sobre a variável que éapontada por um ponteiro, é que elasempre deve ter um tipo de dado;
• Neste caso - para o computador saberinterpretar o conteúdo da memória paraonde o ponteiro aponta - ele precisasaber qual tipo de dado existe navariável apontada.
![Page 12: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/12.jpg)
Ponteiros
• Então, ao criarmos uma “variávelponteiro”, além de indicar que ela seráum ponteiro, precisamos também indicarqual o tipo de dado apontado:
• int x;
• int * y;
– Onde, x é uma variável inteira tradicional; e
– y é uma variável ponteiro para inteiro.
![Page 13: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/13.jpg)
Ponteiros
• Abra o CodeBlocks;
• Crie um novo projeto “Console / C++”:
![Page 14: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/14.jpg)
Ponteiros (C++)int main()
{
int x;
int* y;
y = &x;
*y = 10;
cout << "Valor de x: " << x << endl;
cout << "Endereço de memória de x: " << y << endl;
x = 22;
cout << "Conteúdo apontado por y: " << *y << endl;
int** z;
z = &y;
cout << "Endereço de memória de y: " << z << endl;
return 0;
}
![Page 15: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/15.jpg)
Ponteiros
• Modificadores e Acesso:
– tipo_de_dado*• Cria um ponteiro para o tipo_de_dado;
– &variável
• Retorna o endereço de uma variável;
–*variável
• Acessa o conteúdo da variável apontada;
![Page 16: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/16.jpg)
Ponteiros• Vantagens e Aplicações:
– Retorno de múltiplos dados em uma função;– Informar a outro programa a área da memória
onde se encontram os dados necessários, semprecisar fazer uma cópia;• Isto deixa os programas mais rápidos e eficientes!
• Desvantagens:– Pode causar constantes erros de acesso
indevido à memória, travando o computador;– Tem o seu uso extremamente limitado ou até
inexistente em linguagens que utilizammáquinas virtuais ou plataformas como .NET;
– Em geral, adicionam bastante complexidade àimplementação de um programa.
![Page 17: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/17.jpg)
REFERÊNCIAS
Atribuições:
Valores, Ponteiros e Referências
![Page 18: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/18.jpg)
Referências
• Linguagens de programação que visam odesenvolvimento para uma determinadaplataforma, e não para um determinadoSistema Operacional – como Java e .NET– não contemplam o uso de ponteirosem sua plenitude;
• Para contornar esta deficiência, existemas referências!
![Page 19: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/19.jpg)
Referências
• Algumas atribuições (em determinadaslinguagens de programação, tal comoJava) são feitas através de referência;
• Nesta forma de atribuição, ao invés de secopiar o valor de uma variável paraoutra, se associam os dois nomes devariáveis à uma única efetiva variável namemória.
![Page 20: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/20.jpg)
Referências
• Este modo de atribuição não funcionapara variáveis de tipos de dadosprimitivos (int, double, etc..), nem comString;
• Elas funcionam para alguns tipos deparâmetros de funções e para classes!
![Page 21: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/21.jpg)
Referências
• Atribuição por VALOR:
public static void main(String[] args) {
int x = 10;
int y = x;
x = 5;
System.out.println(“Valor de X: “ + x);
System.out.println(“Valor de Y: “ + y);
}
![Page 22: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/22.jpg)
Referências
• Atividade Prática: Crie a class:
class Carro {
public String Placa;
public int Ano;
}
![Page 23: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/23.jpg)
Referências
• Atribuição por REFERÊNCIA:public static void main(String[] args) {
Carro c1;
Carro c2;
c1 = new Carro();
c1.Placa = “ABC-1234”;
c1.Ano = 2010;
c2 = c1;
c2.Placa = “DFG-9876”;
c2.Ano = 1980;
System.out.println(“c1: “ + c1.Placa);
System.out.println(“c2: “ + c2.Placa);
}
![Page 24: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/24.jpg)
Referências
• Os resultados dos algoritmos foram diferentes devido à forma de atribuição:
– Classes fazem atribuição por referência.
![Page 25: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/25.jpg)
Referências
• Atribuição por REFERÊNCIA:public static void main(String[] args) {
Carro c1;
Carro c2;
c1 = new Carro();
c1.Placa = “ABC-1234”;
c1.Ano = 2010;
c2 = c1;
c2.Placa = “DFG-9876”;
c2.Ano = 1980;
System.out.println(“c1: “ + c1.Placa);
System.out.println(“c2: “ + c2.Placa);
}
![Page 26: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/26.jpg)
null
null
![Page 27: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/27.jpg)
Referências
• Atribuição por REFERÊNCIA:public static void main(String[] args) {
Carro c1;
Carro c2;
c1 = new Carro();
c1.Placa = “ABC-1234”;
c1.Ano = 2010;
c2 = c1;
c2.Placa = “DFG-9876”;
c2.Ano = 1980;
System.out.println(“c1: “ + c1.Placa);
System.out.println(“c2: “ + c2.Placa);
}
![Page 28: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/28.jpg)
null
null
Objeto CarroPlaca: DFG-9876
Ano: 1980
![Page 29: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/29.jpg)
Referências
• Atribuição por REFERÊNCIA:public static void main(String[] args) {
Carro c1;
Carro c2;
c1 = new Carro();
c1.Placa = “ABC-1234”;
c1.Ano = 2010;
c2 = c1;
c2.Placa = “DFG-9876”;
c2.Ano = 1980;
System.out.println(“c1: “ + c1.Placa);
System.out.println(“c2: “ + c2.Placa);
}
![Page 30: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/30.jpg)
*ref*
null
Objeto CarroPlaca: DFG-9876
Ano: 1980
![Page 31: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/31.jpg)
Referências
• Atribuição por REFERÊNCIA:public static void main(String[] args) {
Carro c1;
Carro c2;
c1 = new Carro();
c1.Placa = “ABC-1234”;
c1.Ano = 2010;
c2 = c1;
c2.Placa = “DFG-9876”;
c2.Ano = 1980;
System.out.println(“c1: “ + c1.Placa);
System.out.println(“c2: “ + c2.Placa);
}
![Page 32: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/32.jpg)
*ref*
*ref*
Objeto CarroPlaca: DFG-9876
Ano: 1980
![Page 33: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/33.jpg)
Conclusão
• Existem três formas básicas deatribuição;
• Cada forma de atribuição possuiaplicações diferentes que possibilitamcriar algoritmos diferentes;
• Atribuição por valor é a mais comum eprimeira aprendida;
![Page 34: Atribuições: Valores, Ponteiros e Referênciasdocente.ifsc.edu.br/vilson.junior/ed/03_Ponteiros_Valores_Referencia… · Valores •A operação de atribuição (sinal de igualdade](https://reader034.vdocuments.pub/reader034/viewer/2022050107/5f450f7b327b4344d150e3c6/html5/thumbnails/34.jpg)
Conclusão
• Atribuição por ponteiros não seráexplorada, pois Java não contemplaponteiros;
• Atribuição por referência será umrecurso muito importante e aplicado nasestruturas de dados que deveremosestudar a seguir.