Windows 下任何指针都是一个 32 位地址,也就是 4 个字节。所以不管什么类型的指针都可以强制转换的。指针类型的意义在于告诉编译器要同时处理该地址以及以后的几个字节。

例如一个指针 p 的值是 0x0041FF10 (瞎编的)
如果它是 int * 类型的
那么用 *p 的时候,就会把 0x0041FF10 开始的 sizeof(int) 个字节一起读出来,按 int 类型的存储方法解析出它的值
如果它是 double * 类型的
那么用 *p 的时候,就会把 0x0041FF10 开始的 sizeof(double) 个字节一起读出来,按 double 类型的存储方法解析出它的值