PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Void Pointers

2 participantes

Ir para baixo

Void Pointers Empty Void Pointers

Mensagem por Fis_física Qua 01 Jun 2016, 21:00

Estou com uma dúvida em relação a ponteiros void. Entendi que são muito úteis por serem genéricos e assim eles podem apontar para qualquer tipo de dado, por outro lado eles têm uma grande restrição pelo fato de não ser possível dereferenciá-los sem fazer uma conversão.
  Mas analisando o seguinte fragmento de código em C++ :

  int i = 5;

  void *pv; // ponteiro genérico
  pv = &i;  // endereço de um int

  cout << *pv;  //ERRO

fiquei pensando que realmente pela declaração do ponteiro não há um tipo para dereferenciar, mas o compilador não sabe que o valor apontado é do tipo int através da instrução → pv = &i; ?

Fis_física
Iniciante

Mensagens : 40
Data de inscrição : 18/12/2015
Idade : 25
Localização : São Paulo

Ir para o topo Ir para baixo

Void Pointers Empty Re: Void Pointers

Mensagem por PedroX Sex 03 Jun 2016, 15:03

Ele pega o endereço da variável na memória. Mas como saberá o tamanho dela na memória (ou seja, seu tipo)?

O compilador poderia fazer isso por pegar o tipo da variável endereçada no ponteiro dentro do seu código e mudar o tipo do ponteiro. Mas e se você usasse esse ponteiro para outro tipo de variável depois? Ponteiros servem para endereços de memória. Você pode mudar o valor deles (ou seja, qual endereço estão apontando) a qualquer momento. Se ele é um ponteiro de um tipo específico, você só pode mudar para um endereço de memória que contenha um valor do tipo especificado. Mas, no caso de um "void pointer", você pode associar a qualquer tipo. E ele não teria como saber, ou adivinhar, qual tipo você está apontando agora. Se você vai apontar para um único tipo sempre, então não faria sentido usar um "void pointer".

E claro: o ponteiro do tipo void não carrega informação de qual tipo de valor ele está guardando. Seria necessário mais um byte para isso. Não sei se é o principal motivo de terem assim escolhido, mas com certeza é um deles.
PedroX
PedroX
Administração
Administração

Mensagens : 1040
Data de inscrição : 24/08/2011
Idade : 28
Localização : Campinas - SP

Ir para o topo Ir para baixo

Void Pointers Empty Re: Void Pointers

Mensagem por Fis_física Sex 03 Jun 2016, 16:45

O que eu tinha pensado era o seguinte : se o compilador sabe que a variável i foi declarada com o tipo int, quando o endereço de i for passado ao ponteiro, ele sabe que o valor apontado é do tipo int. Eu havia entendido assim, estou errado ?

Fis_física
Iniciante

Mensagens : 40
Data de inscrição : 18/12/2015
Idade : 25
Localização : São Paulo

Ir para o topo Ir para baixo

Void Pointers Empty Re: Void Pointers

Mensagem por Fis_física Sex 03 Jun 2016, 20:02

Seria a sequência desse jeito ? Quando tem a declaração da variável i, o compilador vai na memória e deixa i localizada em um endereço, com o respectivo tamanho do tipo int. Depois, quando o ponteiro é declarado, ele vai e coloca o ponteiro em um determinado endereço. Mas quando volta em i para pegar o endereço da variável para armazenar no ponteiro ele "não sabe mais" o tamanho de i, seria isso ?

Fis_física
Iniciante

Mensagens : 40
Data de inscrição : 18/12/2015
Idade : 25
Localização : São Paulo

Ir para o topo Ir para baixo

Void Pointers Empty Re: Void Pointers

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos