类型转换void*到string

Posted qzwjer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型转换void*到string相关的知识,希望对你有一定的参考价值。

遇到一个类型转换的问题,当我试图将void*类型的a转化为string型的b时,这样写:

1 1 void *a;
2 2 string b;
3 3 b = (string)(*a); //错误

 

出现如下错误:

error: ‘void*‘ is not a pointer-to-object type(void*不是指向对象的类型)

正确代码:

void *a;
string b;
b = *(string*)a;

将a先转化为string的指针然后解引用,赋值给b(对string指针的解引用获得的当然是string类型)。

揪根问底(C/C++):

  void*表示“空类型指针”,表示:任意类型的指针,或者该指针与一地址值相关,但是不清楚在此地址上的对象的类型。

  不能直接对void*类型解引用,因为不存在void类型的变量。

  void关键字表示“空类型”,表示不存在的意思,而非表示任意类型,因此可以用void修饰函数( void a(void); 表示函数无返回值,或者返回值为空 return; ,在函数形参位置表示函数没有形参),但不能用void修饰变量,也就是不能写语句 void a; ,不存在类型为void的东西。

  再进一步,为什么不能存在void类型的变量,或者说为什么在面对变量的时候,void就不能表示“任意类型”呢?

  我们知道C/C++是静态类型的语言,定义变量就会分配内存,然而不同类型的变量所占内存不同,如果定义一个任意类型的变量,如何为其分配内存?

  所以,C、C++中没有任意类型的变量。但是,所有指针类型的变量,无论是int*、char*、string*、Student*等等,他们的内存空间都是相同的,所以可以定义“任意类型的指针”,指针类型所占的内存与系统的寻址能力有关,例如32位系统占4字节,64位系统占8字节……

 

以上是关于类型转换void*到string的主要内容,如果未能解决你的问题,请参考以下文章

关于java中的short和int类型转换的问题

无法转换类型“(_)-> Void?”的值到预期的参数类型'(() - > Void)?

vs2013 提示无法从void转换为char

在java中 如何将得到的String转换为Short型 急。。

typescript 类型转换

vs里面bool类型如何转换为string类型