I understand the use of void pointer for malloc implementation.
void* malloc ( size_t size );
Can anyone suggest other reasons or provide some scenarios where it is useful in practice.
Thanks
A void pointer is a pointer that can point to any type of object, but does not know what type of object it points to. A void pointer must be explicitly cast into another type of pointer to perform indirection. A null pointer is a pointer that does not point to an address. A void pointer can be a null pointer.
The only limitations with void pointers are: you cannot dereference void pointer for obvious reasons. sizeof(void) is illegal. you cannot perform pointer arithmetics on void pointers.
Void refers to the type. Basically, the type of data that it points to can be any. If we assign the address char data type to a void pointer, it will become a char Pointer, if int data type, then int pointer, and so on. Any pointer type is convertible to a void pointer.
The literal meaning of void is empty or blank. In C, void can be used as a data type that represents no data.
One good scenario void*
use is when you want to implement any generic ADT's, in case you just don't know what datatype it going to keep and deal with. For example, a linked list like the following:
typedef struct node_t node; struct { void* data; node* prev, next; } node_t; typedef struct list_t list; typedef void* (func)(void*) cpy_func; typedef void (func)(void*) del_func; struct { node* head, tail, curr; cpy_func copy; del_func delete; } list_t; initializeLinkedList(cpy_func cpy, del_func del); //here you keep going defining an API
Here for example you will pass in initialization function pointers to other functions which will be capable of copying your datatype to your list and freeing it afterwards. So by using void*
you make your list more generic.
I think void*
remained in C++ only because of backward compatibility, since in C++ you have more safe and sophisticated ways to achieve the same result like templates, functors, etc., and you don't need to use malloc while programming C++.
Regarding C++, I don't have any specific useful examples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With