类型转换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字节……

 

原文地址:https://www.cnblogs.com/qzwjer/p/11106401.html

时间: 2024-11-26 10:50:04

类型转换void*到string的相关文章

public static void main(String arg[]) 详细解释(转)

public static void main(String arg[]) 该语句定义了main方法. main方法是程序执行的入口,所有的java程序都必须具备一个main()方法,而且必须按照如上的格式来定义. 不具有main方法的类可以编译,但不能执行.因为它没有main方法作为执行起始点. public是访问修饰符,如果在类成员前加之,则可从任何地方访问此类成员. static 表示不需要创建类实例就可以调用main方法,因为,一般情况下,类没有实例化就不能访问.但如方法前有关键字sta

public static void main(String[] args){}函数诠释

主函数的一般写法如下: public static void main(String[] args){-} 下面分别解释这些关键字的作用: (1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数. (2)static关键字,告知编译器main函数是一个静态函数.也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就 已经存在了.如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示ma

C#中static void Main(string[ ] args)中的作用及解释

C#中static void Main(string[ ] args)中的作用及解释 static 表示方法是静态的就是说方法在程序被编译的时候就被分配了内存,使用的时候不用生成某个类型的对象,知道程序退出才释放. void 表示方法没有返回值,就是方法没有renturn 关键字. main 是方法名,当然这个方法是特殊的方法,是Main()就是说是主函数,就是整个程序的入口,程序被编译后从这里开始执行,这也是main方法要是static的原因,因为在啥都没做的时候这个函数就得存在. strin

C#中static void Main(string[] args)的含义

C#中static void Main(string[] args)的含义 static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. 运行时会弹出命令窗口,你可以在那里输入一些参数,string[] args 指的就是你在命令窗口输入的参数. 也就是命令行参数. args是用来处理命令行参数的.命令行参数,就是你运行这个程序的时候给它传的参数.它是可选项

《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法

public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动的时候就是按照上述方法的签名(必须有public与static修饰,返回值为void,且方

将 main 方法定义为:public static void main(String[] args)的理由

1.没有public修饰符或者其他修饰符 错误: 在类...中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 2.没有static 错误: main 方法不是类 ... 中的static, 请将 main 方法定义为: public static void main(String[] args) 3.返回值不是v

关于public static void main(String[] args)相关知识

main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同.比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 这个main()方法的声明为:public static void main(String args[]).必须这么定义,这是Java的规范.为什么要这么定义,和JVM的运行有关系. 1)解释main:当一个类中有main()方

public static void speckOnWin7(string text),在win7中读文字

public static void speckOnWin7(string text) {    //洪丰写的,转载请注明 try { string lsSource = ""; //if (File.Exists(Application.StartupPath + "\\Error.txt")) // lsSource = File.ReadAllText(Application.StartupPath + "\\Error.txt"); //

public static void main(String[] args)说明

/*public static void main(String[] args) 主函数特殊之处:1,格式是固定的.2,被jvm所识别和调用. public:因为权限必须是最大的.static:不需要对象的,直接用主函数所属类名调用即可.void:主函数没有具体的返回值.main:函数名,不是关键字,只是一个jvm识别的固定的名字.String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型. */ class MainDemo { public static