atribuições: valores, ponteiros e...

34
Atribuições: Valores, Ponteiros e Referências Estruturas de Dados Prof. Vilson Heck Junior

Upload: others

Post on 14-Jul-2020

2 views

Category:

Documents


0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*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

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

*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

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

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.