Ponteiros
2. As variáveis de um programa, em geral, podem ter dois tipos de conteúdo: • Valor: instâncias de um determinando tipoint contador = 5; char letra = „b‟; double nota = 8.53; tipo: int tipo: char tipo: double valor: 5 valor: „b‟ valor: 8.53 • Referência: indica outra variável na memória int notas[2] tipo: ref. p/ int[] valor: {8, 10} texto valor: “abc” tipo: ref. p/ string Prof. Adriano Teixeira de Souza
3. Atribuir uma variável de valor a outra apenas copia seu conteúdo atual. Uma modificação em uma dela snão afeta a outra variável. Ponto p1, p2; p1 3 1 p2 x y x y...p1.x = 3;p1.y = 1; p1 3 1 3 1 p2... x y x yp2.x = p1.x; p1 5 1 3 1 p2p2.y = p1.y; x y x y...p1.x = 5; Prof. Adriano Teixeira de Souza
4. Atribuir uma referência faz com que ambas apontem para o mesmo objeto. Qualquer alteração afeta as duas variáveis.Java: p1 3 1 p2 ... x yPonto p1, p2;... 3 1 p1 p2p1.x = 3; x yp1.y = 1;... p1 5 1 p2p2 = p1; x y...p1.x = 5; Prof. Adriano Teixeira de Souza
5. Em Java, todos os tipos primitivos são representados por valores:char c; c = „a‟;int x, y; x = y = 3;Os tipos compostos (classes), por outro lado, utilizamreferências: s = “if672”;String s; p = new Ponto(3,1);Ponto p; p.x = x;Integer n; n = new Integer(3);Vector v; v = null; Prof. Adriano Teixeira de Souza
6. A memória só é requisitada no momento em que o objeto énecessário, evitando o desperdício. Parâmetros do construtorEm Java/C++: através do operador newJava: Ponto p = new Ponto(800,600);C++: Ponto *p = new Ponto(800,600); Prof. Adriano Teixeira de Souza
7. A memória é alocada para o novo objeto, e sua posiçãoarmazenada em uma referência (ponteiro): Memóriaint[] a; a bint[] b;... int[5]a = new int[5];b = new int[4];... int[4]a = b;Não há mais nenhum ponteiro para esta região. O que acontece com ela? Prof. Adriano Teixeira de Souza
8. Em C/C++, é preciso desalocar as variáveis antes deeliminar a última referência para ela.Em