LacosTTe Postado Março 21, 2012 Denunciar Share Postado Março 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; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Jardim Postado Março 21, 2012 Denunciar Share Postado Março 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; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LacosTTe Postado Março 21, 2012 Autor Denunciar Share Postado Março 21, 2012 (editado) 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 ) Editado Março 21, 2012 por LacosTTe Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LacosTTe Postado Março 21, 2012 Autor Denunciar Share Postado Março 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 bruce845 Postado Março 22, 2012 Denunciar Share Postado Março 22, 2012 (editado) 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! Editado Março 22, 2012 por bruce845 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 LacosTTe Postado Março 22, 2012 Autor Denunciar Share Postado Março 22, 2012 Era isso mesmo! Muito Obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
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 para o comentário
Compartilhar em outros sites
5 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.