Ir para conteúdo
Fórum Script Brasil
  • 0

ponteiros, estruturas.


LacosTTe

Pergunta

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!.

#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;
}

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

è 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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

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 por LacosTTe
Link para o comentário
Compartilhar em outros sites

  • 0

Bem, fiz as seguintes modificações:

Onde estava:

p2=p1

eu coloquei:

p2=&p1

e onde estava:

p2->y=82

eu coloquei:

(*p2)->y=82

E 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=82

p2 que está com o ENDEREÇO de p1 acessará o membro da estrutura da seguinte forma:

(*p2)->y=82

primeiro 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 por bruce845
Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...