Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Localhost

Memória dinâmica

Mensagens Recomendadas

Localhost

Olá. Surgiu-me aqui uma dúvida a fazer umas experiências...

Quando eu aloco dinamicamente por exemplo um int, esse int está acessivel por todas as funções correcto?

Então, a minha dúvida é a seguinte: eu para modificar o valor desse int preciso de passar para uma função o endereço do ponteiro que está a apontar para o int alocado dinamicamente ou posso passar por valor o ponteiro e depois posso alterar o valor e isso vai-se fazer sentir em todas as funções? Ou seja, se eu alocar dinamicamente uma variável e depois modificar a variável por um ponteiro que está noutra função essa modificação vai-se fazer sentir em todas as funções?

Tipo isto:

int main(void) {
  int *pHeap = (int *) malloc(sizeof(int));
  *pHeap = 10;
  printf("Valor: %i\n", *pHeap);
  ModificaValor(pHeap);
  printf("Valor agora: %i\n", *pHeap);
  return 0;
}

void ModificaValor(int *pValue) {
  *pValue = 20;
  printf("Valor na função: %i\n", *pValue);
}

Isto foi feito aqui, falta algumas coisas mas esta é a ideia geral. Aquela função ModificaValor vai modificar o valor também na função main ou vão ser uma modificação local apenas?


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrosorio

Olá. Surgiu-me aqui uma dúvida a fazer umas experiências...

Quando eu aloco dinamicamente por exemplo um int, esse int está acessivel por todas as funções correcto?

Então, a minha dúvida é a seguinte: eu para modificar o valor desse int preciso de passar para uma função o endereço do ponteiro que está a apontar para o int alocado dinamicamente ou posso passar por valor o ponteiro e depois posso alterar o valor e isso vai-se fazer sentir em todas as funções? Ou seja, se eu alocar dinamicamente uma variável e depois modificar a variável por um ponteiro que está noutra função essa modificação vai-se fazer sentir em todas as funções?

Tipo isto:

int main(void) {
  int *pHeap = (int *) malloc(sizeof(int));
  *pHeap = 10;
  printf("Valor: %i\n", *pHeap);
  ModificaValor(pHeap);
  printf("Valor agora: %i\n", *pHeap);
  return 0;
}

void ModificaValor(int *pValue) {
  *pValue = 20;
  printf("Valor na função: %i\n", *pValue);
}

Isto foi feito aqui, falta algumas coisas mas esta é a ideia geral. Aquela função ModificaValor vai modificar o valor também na função main ou vão ser uma modificação local apenas?

Aconselho-te a ler sobre apontadores para perceberes melhor como funciona a memória dinâmica.

Quando fazes:

int *pHeap = (int*)malloc(sizeof(int));

estás a alocar memória para um inteiro e na variável pHeap fica o endereço de memória onde esse inteiro ficará guardado. Quando passas a variável à função ModificaValor, estás a dar o endereço do teu inteiro, e ao fazer:

*pValue = 20;

estás a alterar o valor que se encontra nesse endereço. Quando acaba a função ModificaValor, a variável pValue é destruída, mas ela continha apenas o endereço da memória onde se encontra o inteiro. O inteiro continua lá.


Não respondo a dúvidas por mensagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Localhost

Ah sim, eu é que me esqueci que estava na verdade a passar o endereço. Não estava a prestar atenção. Desculpa lá.


here since 2009

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.