请教各位前辈,为什么将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*解引用,你想让编译器对这个指针如何进行解释?这不是扯淡么