Jump to content

Recommended Posts

Posted (edited)

bom, eu vou publicar o codigo e explicar nele

int main() {
system ("color 17");
system ("title JANELA DE TESTES");
int vetor[2];
int z,x;
int *ptr;
int *xptr;//se eu nao usar isto-----------------------------------------------------------------------------------------------------------
int **ptrptr;
int *v;
v=vetor;
cout<<"Introduza o vetor 1"<<endl;
cin>>v[0];
cout<<"Introduza o vetor 2"<<endl;
cin>>v[1];
cout<<"o valor do vetor 1 é "<<vetor[0]<<" e do vetor 2 é "<<vetor[1]<<" sucesso!"<<endl;
trocar(v[0],v[1]);
cout<<"valores trocados seria "<<vetor[0]<<" e "<<vetor[1]<<" sucesso!"<<endl;
system("cls");
cout<<"Insere um valor"<<endl;
cin>>z;
ptr=&z;
cout<<"Insere outro valor"<<endl;
cin>>x;
xptr=&x;//nem isto------------------------------------------------------------------------------------------------------------------------
ptrptr=&ptr;
cout<<"o primeiro valor é "<<*ptr<<" e "<<**ptrptr<<" sucesso"<<endl;
ptrptr=&xptr;//e aqui usar *ptrptr=&x;--------------------------------------------------------------------------------------------------------
cout<<"separados seria "<<*ptr<<" e "<<**ptrptr<<" sucesso"<<endl;
cout<<"em hexadecimal seria "<<ptr<<" e "<<ptrptr<<" sucesso"<<endl;
return 0;
}

entao basicamente o que acontece é que no console vai aparecer no caso de eu usar o codigo tal como ele esta acima é isso

o primeiro valor é 2 e 2 sucesso
separados seria 2 e 3 sucesso
em hexadecimal seria 0x22ff0c e 0x22ff00 sucesso

mas se eu usar como expliquei nos comentários aparece assim

o primeiro valor é 2 e 2 sucesso
separados seria 3 e 3 sucesso
em hexadecimal seria 0x22ff0c e 0x22ff00 sucesso

alguém pode me explicar porque ? é a primeira vez que estou a usar ponteiros, e estou a guiarme por um tutorial, mas decidi nao fazer exatamente igual, entao surgiu esse problema e fiquei com a duvida...

Edited by Bernardo Vieira
Posted

a primeira coisa que tens de fazer é :

- começar a escrever código de forma legível ...

- remover todo o código que é desnecessário para o teu problema

isso fica assim :

#include <iostream>

int main() {
 int z, x;
 int *ptr;
 int *xptr;
 int **ptrptr;

 cout << "Insere um valor" << endl;
 cin >> z;
 ptr = &z;

 cout << "Insere outro valor" << endl;
 cin >> x;
 xptr = &x;

 ptrptr = &ptr;
 cout << "o primeiro valor é " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//                              (valor em z)       (valor em z)

 ptrptr = &xptr;
 cout << "separados seria " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//                              (valor em z)       (valor em x)

 cout << "em hexadecimal seria " << ptr << " e " << ptrptr << " sucesso" << endl;

 return 0;
}
IRC : sim, é algo que ainda existe >> #p@p
Posted

sim, mas eu percebi, e basicamente o que fizeste foi apagar a outra parte do codigo que nao interessa no assunto, mas vá, a minha duvida era, se eu podia fazer o que acabaste de fazer (com o teu codigo) mas sem usar o "int *xptr;"

essa é a minha duvida

Posted

#include <iostream>

int main() {
 int z, x;
 int *ptr;
 int *xptr;
 int **ptrptr;

 cout << "Insere um valor" << endl;
 cin >> z;
 ptr = &z;

 cout << "Insere outro valor" << endl;
 cin >> x;
 xptr = &x;

 ptrptr = &ptr;
 cout << "o primeiro valor é " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em z)

 ptrptr = &xptr;
 cout << "separados seria " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em x)

 cout << "em hexadecimal seria " << ptr << " e " << ptrptr << " sucesso" << endl;

 return 0;
}

basicamente esse código mas sem o ponteiro " int *xptr; " ou seja, se posso poupar um ponteiro! é possivel? eu nao quero fazer nada em especifico, estou só a aprender! quando souber algumas coisas (tipo bastante) é que começo a desafiar me com coisas mais dificeis

Posted

se assim funciona

#include <iostream>

int main() {
 int z, x;
 int *ptr;
 int *xptr;
 int **ptrptr;

 cout << "Insere um valor" << endl;
 cin >> z;
 ptr = &z;

 cout << "Insere outro valor" << endl;
 cin >> x;
 xptr = &x;

 ptrptr = &ptr;
 cout << "o primeiro valor é " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em z)

 ptrptr = &xptr;
 cout << "separados seria " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em x)

 cout << "em hexadecimal seria " << ptr << " e " << ptrptr << " sucesso" << endl;

 return 0;
}

porque é que nao funciona assim ?

#include <iostream>

int main() {
 int z, x;
 int *ptr;
 int **ptrptr;

 cout << "Insere um valor" << endl;
 cin >> z;
 ptr = &z;

 cout << "Insere outro valor" << endl;
 cin >> x;

 ptrptr = &ptr;
 cout << "o primeiro valor é " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em z)

 ptrptr = &x;
 cout << "separados seria " << *ptr << " e " << **ptrptr << " sucesso" << endl;
//							  (valor em z)	   (valor em x)

 cout << "em hexadecimal seria " << ptr << " e " << ptrptr << " sucesso" << endl;

 return 0;
}
Posted

No primeiro codigo, correctamente, tens

  ptrptr = &xptr;

Nesta situacao, ptrptr tem o tipo int** e &xptr tem o tipo int**, portanto tudo funciona bem.

No segundo codigo, erradamente, tens

  ptrptr = &x;

Nesta situacao, ptrptr tem o tipo int** e &x tem o tipo int*, e como os tipos nao sao compativeis nao funciona bem.

Em C, podes configurares o compilador para te avisar destas falhas de coerencia entre tipos (suponho que em C++ tambem; possivelmente ate estas falhas originam erros de compilacao).

  • Vote 1

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

desculpa, esquecime, assim dá erro, tem de ser "*ptrptr = &x;" e assim nao dá erro! mas dá o mesmo valor tanto em ptrptr como em ptr e nao podia...acho eu porque supostamente se usar *ptrptr passa a ser do tipo int* e x tbm é int*

e porque ptrptr vai ficar a apontar para x e ptr já esta a apontar para z

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.