[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: So mais uma duvida...



Paulo Eduardo A. Silveira writes:
 > Entao professor, quando voce escreveu:
 > ptr++;
 > soh o vetor do ptr mudou, o els continuo no mesmo certo?

Um ponteiro, por exemplo 

int *ptr;

que aponta para inteiros é uma variável que quarda o endereço de um inteiro.
Suponha que eu declaro 

int v[100];

e então faço 

ptr=&v[0];

O operador & devolve o endereco do objeto no qual ele está sendo aplicado,
neste exemplo, a variável v[0].  Assim, a atribuicao ptr=&v[0]; guarda em ptr
o endereco de v[0].  Posso agora fazer "aritmética com ponteiros", como por
exemplo  

ptr=ptr+1;

(equivalentemente ptr++;)  Isto faz com que ptr aponte para v[1].  Posso
tambem fazer 

ptr=ptr+5;

que faz com que ptr aponte para v[5], etc.  Posso tambem comparar:

if (ptr>v[4]) ...

Para saber o inteiro que está guardado no endereco apontado por ptr, eu aplico
o operador *, por exemplo, (se fiz antes int x;)

ptr=&v[0];
x=*ptr;

guarda na variavel x o valor de v[0].  

Posso tambem fazer agora

*ptr=10;

que fara com que v[0] se torne 10.  

 > Sendo assim, voce PRECISA criar um ponteiro, porque senao voce nunca
 > poderia escrever algo do tipo:
 > els[0]->id = els[1]->id;

esta atribuicao faz sentido, desde que els aponte para um vetor de estruturas
que tem um campo chamado id.

 > certo?
 > Entao para fazer isso com um ponteiro, basta eu dar um ponteiro++ (supondo
 > que ele esteja no vetor 0 e o els tambem) eu posso digitar:
 > ptr++; //para passar ao proximo vetor
 > els->id = ptr->id;
 > Isso seria o mesmo que escrever o que esta la em cima, soh que aqui eu
 > trabalho com ponteiro, e la eh um vetor de estrutura...
 > Outra coisa, nesse caso do ponteiro, eu posso escrever ptr=5; para que ele
 > aponto ao vetor 5 da estrutura? Alias, vai existir ptr=0 como em vetores
 > ou comeca pelo ptr=1?

Ao inves de 

ptr=5; 

voce deve fazer 

ptr=(&v[0]+5);

para ele apontar para v[5], por exemplo.  

Boa sorte, Yoshi

PS Vejam capítulo 5 do Kernighan e Ritchie para estas coisas de ponteiros. 

 > FaloWWW
 > Paulo
 > 
 >  -------------------------------------
 >  Paulo Eduardo A. Silveira  
 >  Undergraduating in Computer Science
 >  University of Sao Paulo - IME
 >  http://www.linux.ime.usp.br/~peas
 >  -------------------------------------