A void pointer is a pointer that has no associated data type with it. A void pointer can hold address of any type and can be typcasted to any type.
int a = 10; char b = 'x' ; void *p = &a; // void pointer holds address of int 'a' p = &b; // void pointer holds address of char 'b' |
Advantages of void pointers:
1) malloc() and calloc() return void * type and this allows these functions to be used to allocate memory of any data type (just because of void *)
int main(void) { // Note that malloc() returns void * which can be // typecasted to any type like int *, char *, .. int *x = malloc(sizeof(int) * n); } |
Note that the above program compiles in C, but doesn’t compile in C++. In C++, we must explicitly typecast return value of malloc to (int *).
2) void pointers in C are used to implement generic functions in C. For example compare function which is used in qsort().
Some Interesting Facts:
1) void pointers cannot be dereferenced. For example the following program doesn’t compile.
#include<stdio.h> int main() { int a = 10; void *ptr = &a; printf ( "%d" , *ptr); return 0; } |
Output:
Compiler Error: 'void*' is not a pointer-to-object type
The following program compiles and runs fine.
#include<stdio.h> int main() { int a = 10; void *ptr = &a; printf ( "%d" , *( int *)ptr); return 0; } |
Output:
10
2) The C standard doesn’t allow pointer arithmetic with void pointers. However, in GNU C it is allowed by considering the size of void is 1. For example the following program compiles and runs fine in gcc.
#include<stdio.h> int main() { int a[2] = {1, 2}; void *ptr = &a; ptr = ptr + sizeof ( int ); printf ( "%d" , *( int *)ptr); return 0; } |
Output:
2
Note that the above program may not work in other compilers.
References:
http://stackoverflow.com/questions/20967868/should-the-compiler-warn-on-pointer-arithmetic-with-a-void-pointer
http://stackoverflow.com/questions/692564/concept-of-void-pointer-in-c-programming
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.