Bernardo Vieira Posted April 29, 2013 at 11:29 PM Report #505258 Posted April 29, 2013 at 11:29 PM (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 April 29, 2013 at 11:32 PM by Bernardo Vieira
HappyHippyHippo Posted April 30, 2013 at 08:43 AM Report #505281 Posted April 30, 2013 at 08:43 AM 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 Portugol Plus
Bernardo Vieira Posted April 30, 2013 at 06:55 PM Author Report #505361 Posted April 30, 2013 at 06:55 PM 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
HappyHippyHippo Posted April 30, 2013 at 07:34 PM Report #505362 Posted April 30, 2013 at 07:34 PM mas eu não faço ideia do que queres fazer ! logo não sei se é possível fazer ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Bernardo Vieira Posted April 30, 2013 at 08:08 PM Author Report #505367 Posted April 30, 2013 at 08:08 PM #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
HappyHippyHippo Posted April 30, 2013 at 08:12 PM Report #505368 Posted April 30, 2013 at 08:12 PM mas o que queres dizer com "poupar" ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Bernardo Vieira Posted April 30, 2013 at 08:45 PM Author Report #505372 Posted April 30, 2013 at 08:45 PM usar mais um ponteiro significa usar mais espaço na memoria! ou estarei enganado?
HappyHippyHippo Posted April 30, 2013 at 08:46 PM Report #505373 Posted April 30, 2013 at 08:46 PM então eu pergunto, e para quê que o estás a usar ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Bernardo Vieira Posted April 30, 2013 at 08:51 PM Author Report #505374 Posted April 30, 2013 at 08:51 PM e eu respondo, porque se eu nao usar nao dá certo! no meu primeiro post tens os resultados, eu tentei na usar, mas nao dava!
HappyHippyHippo Posted April 30, 2013 at 09:14 PM Report #505382 Posted April 30, 2013 at 09:14 PM assim é complicado, só é possível dizer se é necessário ou desnecessário sabendo o que raio pretendes fazer ! enquanto andares a responder dessa forma continuarás a não ter resposta ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Bernardo Vieira Posted April 30, 2013 at 10:07 PM Author Report #505394 Posted April 30, 2013 at 10:07 PM 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; }
pmg Posted April 30, 2013 at 10:16 PM Report #505399 Posted April 30, 2013 at 10:16 PM 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). 1 Report 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!
Bernardo Vieira Posted April 30, 2013 at 10:22 PM Author Report #505400 Posted April 30, 2013 at 10:22 PM 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
HappyHippyHippo Posted April 30, 2013 at 10:37 PM Report #505404 Posted April 30, 2013 at 10:37 PM olha para este tópico e vê a última imagem. pensa bem no que estás a fazer https://www.portugal-a-programar.pt/topic/60162-apontadores-uma-explicacao-visual/ 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now