There is no fixed answer; it depends entirely on the architecture, implementation of the compiler, and even on the type of the pointer itself. Pointers to different types cannot guarantee the same size and / or presentation.
For example, suppose a destination architecture where the smallest addressable storage unit is 16 bits wide (or wider). Each word can contain multiple char values; all other types occupy a full word or more. In such an architecture, char * and void * will require additional bits for word offsets compared to other types of pointers.
Note also that the type of pointer can be wider than the number of bits actually needed to store the address. The original Macintosh was powered by a Motorola 68000 processor, which had a 32-bit word size, but only 24 bits on the address bus. The pointer types were 32 bits wide, leaving the top 8 bits unused. Entrepreneurial MacOS programmers have taken advantage of this to store some data in the topmost byte of type pointer, using most of this precious 128 KB of RAM. Of course, Motorola eventually released a processor with 32 address lines (68020), which means that all this code had to be rewritten.
On modern commercial desktop and server hardware (read: x86), itβs reasonable to assume that all types of pointers are the same size as the native word size (32- or 64-bit), and that all types of pointers have the same size and presentation . Just keep in mind that this should not be true.
source share