Pular para o conteúdo

Endereços de ponteiros dentro de ponteiros para estruturas.

Responder tópico
  • Denunciar
  • Indicar

1. Endereços de ponteiros dentro de ponteiros para estruturas.

Enviado em 24/07/2012 - 11:24h

Bom dia, pessoal. Alguém saberia me explicar porquê os endereços das variáveis i e d->value são diferentes já que no código abaixo d->value aponta para i?


#include <stdio.h>
#include <stdlib.h>

typedef struct data_tag
{
int *value;
} *data;

int main(int argc, char *argv[])
{

data d;
int i;

i = 10;

d = malloc(sizeof(struct data_tag));
d->value = &i;

printf("%p\n", &i);
printf("%d\n", i);

printf("%p\n", &d->value);
printf("%d\n", *d->value);

*d->value *= 2;

printf("%p\n", &i);
printf("%d\n", i);

printf("%p\n", &d->value);
printf("%d\n", *d->value);

printf("%p\n", &d);

system("PAUSE");
return 0;
}

Responder tópico

2. Re: Endereços de ponteiros dentro de ponteiros para estruturas.

Enviado em 24/07/2012 - 12:15h

Cuidado pra nao confundir endereço com conteúdo armazenado.

i e d são duas variáveis declaradas, são diferentes.
Portanto, tem endereços diferentes na memória. A diferença é que a que for ponteiro armazena o endereço de outra (assim como a outra armazena um inteiro, o ponteiro armazena um número de endereço), mas não que dizer que o endereço desse ponteiro seja o endereço da outra.

3. Re: Endereços de ponteiros dentro de ponteiros para estruturas.

Enviado em 24/07/2012 - 15:17h

jarlisson escreveu:

Cuidado pra nao confundir endereço com conteúdo armazenado.

i e d são duas variáveis declaradas, são diferentes.
Portanto, tem endereços diferentes na memória. A diferença é que a que for ponteiro armazena o endereço de outra (assim como a outra armazena um inteiro, o ponteiro armazena um número de endereço), mas não que dizer que o endereço desse ponteiro seja o endereço da outra.
Entendi. Já corrigi o código ficando assim:

#include <stdio.h>
#include <stdlib.h>

typedef struct data_tag
{
int *value;
} *data;

int main(int argc, char *argv[])
{

data d;
int i;

i = 10;

d = malloc(sizeof(struct data_tag));
d->value = &i;

printf("%p\n", &i);
printf("%d\n", i);

printf("%p\n", d->value);
printf("%d\n", *d->value);

*d->value *= 2;

printf("%p\n", &i);
printf("%d\n", i);

printf("%p\n", d->value);
printf("%d\n", *d->value);

printf("%p\n", &d);

system("PAUSE");
return 0;
}

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder