Jump to content
Fórum Script Brasil
  • 0

ponteiros, estruturas.


LacosTTe

Question

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 to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 )

Edited by LacosTTe
Link to comment
Share on other 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!

Edited by bruce845
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...