C++将void*类型的指针强制转换后无法解引用该指针所指向的对象

请教各位前辈,为什么将void*指针进行static_cast强制类型转换后无法让该指针解引用
所指向的对象?但是强制转换后赋给int*dp后却可以解引用,输出*dp的值是100;
代码和报错信息

c/c++语言中,void意思是 无类型,所以不能声明类型为void的变量,但可以声明指向void类型的指针。

void *foo ;   ///Works fine
void foo ;   ///Error

可以给void指针赋任意类型的地址值,但不能通过void指针访问这些地址指向的变量

int i=90 ;
void *ip ;
ip=&i ;   ///Works fine
cout<< *ip ;   /* error:cannot access the value of i */

如果想要访问void指针指向的变量,需要先将其转换为具体类型的指针,如下:

int i=90 ;
void *ip=&i ;
int *iv=static_cast<int *>(ip) ; ///Casting ip to int type
cout<< *iv ; //Works fine

注意需要转换为正确的类型,否则会引入bug,如下:
string st=*static_cast<string *>(ip) ;// casting to string type
cout<< st ; //undefined

如果对您有帮助,请采纳答案好吗(鼠标在我的答案区域停留片刻即可看到采纳按钮),谢谢!

按照我的理解,void * 指针,其实是一个抽象的指针,编译器本身是不知道这个指针指向的内存地址里面,存储的是什么类型的值。但是cout对于输入的值类型是有要求的,所以会提示你类型非法。

因为并不会改变p的类型啊 p还是void*类型指针
static cast不会改变其本身属性

你写个void*解引用,你想让编译器对这个指针如何进行解释?这不是扯淡么