指向不同类型的指针的差异不体现在指针的表示方法的不同而是在于它所指向的对象的类型的不同,这种不同会告诉编译器如何解释某个特定地址中的内存内容及其大小。
例如一个指向地址1000的整数指针,在32位机器上,将涵盖的地址空间为1000-1003。
对于一个指向地址1000而类型为void*的指针,我们无法知道它涵盖的地址空间。所以,一个类型为void*的指针只能够含有一个地址,但是不能够通过它操作所指的object。
所以转型(cast)其实是一种编译器指令。大部分情况下它并不改变一个指针所含的真正地址,它只影响“被指出之内存的大小和其内容”的解释方式。
来自《深入探索C++对象模型》第一章。