1

Não consigo entender o significado desse cast: a função vai executar e retorna um tipo type_t, que é um typedef para void*.

Depois é feito um cast para header_t*, que é uma struct, mas não consigo entender como ocorre este cast. Quando faço um cast como este, o valor de retorno da função vira um tipo header_t*.

Como funciona o cast de valores para tipo de dados abstratos?

header_t *orig_hole_header = (header_t *)lookup_ordered_array(iterator, heap->index);

u32int orig_hole_pos = (u32int)orig_hole_header;

1 Resposta 1

1

Em primeiro lugar

header_t* é um apontador para o tipo header_t.

Resposta

Os apontadores para o tipo void void* são apontadores para qualquer tipo. São utilizados quando o programador não sabe qual o tipo de informação que este vai receber. Isto é, se é um int, char...

Como tal estes podem ser convertidos para qualquer tipo de apontador.

int i = 5;
void *p = &i;
*p = 4;//Valor de i agora é 4

Porquê o cast (header_t *) ??

Por razão nenhuma. Pelos menos em C é possivel fazer cast de void* para qualquer tipo de apontador, não acrescentando nenhuma informação necessára ao programador(até dificulta a legibilidade do código), mas em C++ é obrigatório o cast.

Exemplo de retorno tipo void*

malloc o seu retorno é void* porque o programador pode definir o que tamanho que desejar, sendo assim não fazia sentido ela possuir um tipo com tamanho definido.

Problema do cast de funções que retornam void*

Se te esqueceres de incluir o header file stdlib.h e chamares a função malloc terás problemas pois em C o tipo padrão é int sendo assim seria considerado int malloc() e o cast apenas esconderia o warning dependendo do compilador.

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .