void Pointers Definition
Learn about void pointers, a key concept for implementing genericity in C.
We'll cover the following
Introduction
Up until this point, we’ve worked with various pointer types, such as:
- Pointers to
int
- Pointers to
float
- Pointers to
char
- Pointers to custom data types, defined using structures
One limiting factor was that different pointer types are not often compatible. For example, an int
pointer can’t usually point to a floating point number. This fact introduces an interesting problem. The problem is what happens when we want to write a function that doesn’t depend on the data type, as the processing is identical. We’d have to create multiple almost identical functions, where the only difference is the data type of the arguments.
For example, let’s look at the memcpy
function. Its purpose is to copy data from one memory block to another memory block. We shouldn’t care what that data is. We just need to copy it byte by byte. How would we go about implementing it? Should we create a memcpy_int
, memcpy_float
, and so on for every data type we need to copy?
The answer is no! It wouldn’t be a good code design. Not only do we need to create a potentially unlimited number of identical functions, but we also have to remember to use the correct one for the current data type.
The solution is to use void
pointers.
The void
pointers
A void
pointer (void*
) is a pointer that can point to any other pointer. It doesn’t have a concrete data type (like an int
pointer that points to an int
). We can view it as a placeholder or wildcard pointer. It simply accepts any other pointer.
Consider the following code, where we create a void
pointer at in line 11. We initialize it using an int
pointer and a float
pointer. The code compiles fine, proving that void*
can point to any T*
, where T
is a data type (like int
, float
).
Get hands-on with 1200+ tech skills courses.