LacosTTe Posted March 21, 2012 Report Share Posted March 21, 2012 OLá...estou testanto estruturas e ponteiros.Gostaria que o ponteiro para ponteiro p2 alterasse o valor de p1.yEsta dando erro na linha que tem o comando p2->y=82;Se alguém puder ajudar, Grato!.#include <stdio.h> typedef struct Ponto { int x; int y; }Ponto; int main(void){ Ponto* p1; Ponto** p2; p1 = (Ponto*) malloc(sizeof(Ponto)); p2 = (Ponto**) malloc(sizeof(Ponto*)); p1->x=18; p1->y=20; p2=p1; p2->y=82; printf("\nxx: %d",p1->x); printf("\nyy: %d",p1->y); printf("\nmemoria p1->x: %p",p1->x); printf("\nmemoria p1->y: %p",p1->y); getchar(); free(p1); return 0; } Quote Link to comment Share on other sites More sharing options...
0 Paulo Jardim Posted March 21, 2012 Report Share Posted March 21, 2012 è isso que precisa parceiro?#include <stdio.h> #include <stdlib.h> typedef struct Ponto { int x; int y; }Ponto; int main(void){ Ponto** p2; Ponto* p1; p2 = (Ponto**) malloc(sizeof(Ponto*)); p1 = (Ponto*) malloc(sizeof(Ponto)); p1->x=18; p1->y=20; *p2 = p1; p1->y =82; printf("\nxx: %d",p1->x); printf("\nyy: %d",p1->y); printf("\nmemoria p1->x: %p",p1->x); printf("\nmemoria p1->y: %p",p1->y); getchar(); free(p1); return 0; } Quote Link to comment Share on other sites More sharing options...
0 LacosTTe Posted March 21, 2012 Author Report Share Posted March 21, 2012 (edited) Olá amigo, sim a intenção é essa, que p1->y tenha o valor 82, mas que isso seja feito por outro ponteiro que aponte pra p1, no caso p2 (p2 altere o valor de p1.y / p1->y). É a partir dae que não estou conseguindo, fazer com que p2 aponte para p1.Ocorre este erro na linha p2 = p1;(y' has not been declared ) Edited March 21, 2012 by LacosTTe Quote Link to comment Share on other sites More sharing options...
0 LacosTTe Posted March 21, 2012 Author Report Share Posted March 21, 2012 Se eu declarar Ponto** p2 (ponteiro para ponteiro) como Ponto* p2 (apenas ponteiro) dá certo.Mas gostaria de saber se há como fazer isso com ponteiro para ponteiro. Quote Link to comment Share on other sites More sharing options...
0 bruce845 Posted March 22, 2012 Report Share Posted March 22, 2012 (edited) Bem, fiz as seguintes modificações:Onde estava:p2=p1eu coloquei:p2=&p1e onde estava:p2->y=82eu coloquei:(*p2)->y=82E deu certo!O que acontece: deve-se lembrar que "ponteiro de ponteiro" contém o endereço de uma variável ponteiro, e não da struct.A alocação de p2 que você fez não necessitou de ter feto porque o endereço contido lá não tem nada em seu conteúdo.No seu caso:Ponto* p1; Ponto** p2; p1 = (Ponto*) malloc(sizeof(Ponto)); p2 = (Ponto**) malloc(sizeof(Ponto*));para p2 acessar algum membro da estrutura, ele precisará acessar o conteúdo da variável que ele está apontando (no caso p1).Ex.: o que p1 acessa desse jeito:p1->y=82p2 que está com o ENDEREÇO de p1 acessará o membro da estrutura da seguinte forma:(*p2)->y=82primeiro ele irá acessar O CONTEÚDO do endereço, que é a variável que aponta para a estrutura e depois ele irá acessar o endereço da estrutura que está no CONTEÚDO DA VARIÁVEL P1. Se não acessar o conteúdo da variável p1 ele não irá conseguir acessar a estrutura.Sempre que declarar um ponteiro de ponteiro, guarde nele o endereço da variável de ponteiro que você quer que mude o conteúdo.Espero ter ajudado! Edited March 22, 2012 by bruce845 Quote Link to comment Share on other sites More sharing options...
0 LacosTTe Posted March 22, 2012 Author Report Share Posted March 22, 2012 Era isso mesmo! Muito Obrigado! Quote Link to comment Share on other sites More sharing options...
Question
LacosTTe
OLá...estou testanto estruturas e ponteiros.
Gostaria que o ponteiro para ponteiro p2 alterasse o valor de p1.y
Esta dando erro na linha que tem o comando p2->y=82;
Se alguém puder ajudar, Grato!.
Link to comment
Share on other sites
5 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.