Você está na página 1de 15

Ponteiros e Arranjos

All sections to appear here

Prof. Gustavo Sikora 2014.1

Ponteiros
Vimos que ponteiros so referncias para reas de memria que deve conter dados teis. O ponteiro deve possuir o mesmo tipo para o qual aponta.

Em Java, toda varivel alocada dinamicamente, todo arranjo e todo objeto na realidade um tipo de ponteiro.
Em C/C++ o ponteiro um tipo de varivel explicita, e possui algumas operaes importantes.

Ponteiros
int *p; int num = 20; p = # //inicializao do ponteiro. Importante para que o ponteiro saiba // para onde estar apontando. O & retorna o endereo da varivel num. *p = 10; // Qual ser o valor de num? Para saber explicitamente qual o endereo, podemos solicitar:
printf(%p, p) //Note que o %p prepara a sada para exibir o endereo de memria.

Ponteiros
Outras operaes: int *p1, *p2; int num; p1 = # p2 = p1; //Iguala os ponteiros, significa que p2 aponta para o mesmo local //que p1. Se for necessrio que um ponteiro receba o valor de outro ponteiro, deveriase fazer: *p2 = *p1 Assim, lembramos que o operador * indica o contedo da regio de memria para onde o ponteiro est referenciando O incremento ++ -- faz com que o ponteiro se locomova em funo da quantidade de bytes do tipo especificado

Ponteiros
int *p; int num[3] = {20, -10; 50}; p = # Desta forma, num[0] = p+0; num[1] = p+1; num[2] = p+2;

Caso queira-se mudar o valor com incremento, deveria ser feito: (*p)++;
A comparao indica diretamente se a rea de memria est numericamente a frente ou atrs: p1 > p2 A == e != indica se apontam ou no para o mesmo local

Ponteiros
int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %d\n", y); return(0); } - Qual a sada deste programa?

Ponteiros e Matrizes
int main () { float matrx [50][50]; int i,j; for (i=0;i<50;i++) for (j=0;j<50;j++) matrx[i][j]=0.0; return(0); } Podemos reescrev-lo usando ponteiros: int main () { float matrx [50][50]; float *p; int count; p=matrx[0]; for (count=0;count<2500;count++){ *p=0.0; p++; } return(0);

Ponteiros e Matrizes
Note que para matrizes de mais de uma dimenso, deve-se passar o primeiro endereo. Para vetores (1 dimenso) no necessrio: int n[5]; int *p; p = n; /*note que tambm no necessrio o endereo do vetor, pois n j uma referncia para uma rea de memria alocada para receber 5 inteiros.*/

Ponteiros e Matrizes
Programa exemplo:

Ponteiros e Matrizes
Utilizando o q para mostrar o valor, indique qual o erro e concerte abaixo para mostrar o valor correto, 10:

#include <stdio.h> int main(){ int x, *p, **q; p = &x; q = &p; x = 10; printf("\n%d\n", &q); return(0); }

Arranjos (Arrays)
De forma simples e direta, representam matrizes. So colees numeradas (ndices) de variveis de um mesmo tipo. um tipo de estrutura de dados.
Exemplos? Utilidade? Restries?

Arranjos (Arrays)
tipo[] nome = {elem0, elem1, elem2..., elemTam-1} tipo[] nome;
nome = new tipo[tamanho];

int[] meses = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};


Saber o tamanho sem precisar contar: meses.length for (int i = 0; i < meses.length; i++) for (int i: meses) //foreach

Arranjos (Arrays) como Objetos


Arranjos so tipos de especiais de objetos Desta forma, pode-se usar o operador new O colchetes uma forma especial de representao dos arrays Por ser um objeto, o nome do arranjo na verdade uma referencia para o lugar de memria onde o arranjo est armazenado. O nome do arranjo apenas uma referncia ou ponteiro

Arranjos (Arrays) como Objetos


double[] x = new double[10]; double[] y = x; A declarao de y = x implica que x e y se referem ao mesmo arranjo! Deste modo, y[5] = 10.0 implica que x[5] tambm ser

Para copiar, pode usar .clone()


y = x.clone();

Exerccios com Array


Escreva um programa em java que receba um arranjo score com n pontuaes reais de um jogo e mostre a maior e a menor pontuao Para o programa anterior, mostre as 3 melhores pontuaes informando quem outro, prata e bronze. **Voc saberia ordenar o arranjo?

Escreva um programa que receba como entrada 2 arranjos de n elementos e retorne um arranjo c com o produto escalar de a por b
Crie uma classe de sua escolha e crie um arranjo de objetos desta classe. Faa a manipulao para preenchimento e exibio das informaes preenchidas.

Você também pode gostar