Menu Close

Can you do pointer arithmetic on a void pointer?

Can you do pointer arithmetic on a void pointer?

Pointer arithmetic cannot be performed on void pointers because the void type has no size, and thus the pointed address cannot be added to. However, there are non-standard compiler extensions allowing byte arithmetic on void* pointers. Pointers and integer variables are not interchangeable.

Why we Cannot dereference a void pointer?

A void pointer cannot be dereferenced. This is because a void pointer has no data type associated with it. There is no way the compiler can know what type of data is pointed to by the void pointer. The solution is typecasting.

Which of the arithmetic operator is not possible on pointer?

Addition, subtraction, multiplication and division are not allowed but pointers can be subtracted to know how many elements are available between these two pointers.

Can you do pointer arithmetic on a void pointer in C?

You can’t do pointer arithmetic on void * types, for exactly this reason! The C standard does not allow void pointer arithmetic. However, GNU C is allowed by considering the size of void is 1. The void type comprises an empty set of values; it is an incomplete object type that cannot be completed.

Can a void pointer point to any chunk of memory?

Void pointers can point to any memory chunk. Hence the compiler does not know how many bytes to increment/decrement when we attempt pointer arithmetic on a void pointer. Therefore void pointers must be first typecast to a known type before they can be involved in any pointer arithmetic.

How to calculate the size of a void pointer?

Given a void *x: x+1 adds one byte to x, pointer goes to byte x+1 (int*)x+1 adds sizeof(int) bytes, pointer goes to byte x + sizeof(int) (float*)x+1 addres sizeof(float) bytes, etc.

When to use pointer arithmetic in an array?

Moreover, pointer arithmetic is only defined on a pointer to an element of an array object and only if the result of the operation would be a pointer to an element in that same array or one past the last element of that array. If those conditions are not met, it is undefined behavior.