那int *obj=new Myclass (10,20);和Myclass *obj=new Myclass(10,20);的区别是什么
时间: 2023-09-04 20:04:05 浏览: 65
C#值类型、引用类型中的Equals和==的区别浅析
### 回答1:
这两个语句的区别在于它们创建的对象类型不同。
第一个语句创建的是一个指向 Myclass 对象的指针,而这个指针是通过 new 运算符分配的内存来存储的。这个指针被声明为一个 int 指针,因此在使用这个指针访问 Myclass 对象时需要进行类型转换。
第二个语句直接创建了一个 Myclass 对象,并将其地址赋值给一个 Myclass 指针。这个指针可以直接用于访问 Myclass 对象的成员。
因此,第一个语句可以用于创建任何类型的对象(只要进行相应的类型转换),而第二个语句只能用于创建 Myclass 类型的对象。
### 回答2:
"int *obj=new Myclass(10,20);" 和 "Myclass *obj=new Myclass(10,20);" 的区别在于对象类型和内存分配方式。
"int *obj=new Myclass(10,20);" 创建了一个指向 Myclass 类型对象的整型指针。这意味着通过指针 obj,我们可以访问 Myclass 对象的内存地址,但无法直接使用 Myclass 类的成员函数和成员变量,因为 obj 是一个整型指针,而不是 Myclass 类型的指针。这种情况下,我们需要使用强制类型转换来将指针转换为正确的类型,并以正确的方式使用。
相反,"Myclass *obj=new Myclass(10,20);" 创建了一个指向 Myclass 类型对象的指针。这意味着通过指针 obj,我们可以直接访问 Myclass 类的成员函数和成员变量,因为 obj 是一个 Myclass 类型的指针,它指向分配的 Myclass 类型的对象。我们可以通过 obj 调用 Myclass 类的方法和访问其成员变量,而无需进行强制类型转换。
总结起来,"int *obj=new Myclass(10,20);" 创建了一个指向 Myclass 类对象的整型指针,而 "Myclass *obj=new Myclass(10,20);" 创建了一个直接指向 Myclass 类对象的指针。这两种方式的主要区别在于创建的指针类型和相应的内存访问权限。
### 回答3:
int *obj=new Myclass (10,20); 和 Myclass *obj=new Myclass (10,20); 的区别在于对象的类型不同。
第一个表示的是通过"new"操作符创建了一个"int"类型的指针变量"obj",并将其初始化为指向一个"Myclass"类型的新对象。这里使用int类型的指针来指向Myclass类型的对象,可能是因为Myclass类中有一个转换构造函数可以将两个int类型的参数转换为对象的类型。
第二个表示的是直接创建了一个"Myclass"类型的指针变量"obj",并将其初始化为指向一个具有10和20作为参数的新对象。这里直接创建的是Myclass类型的对象,不需要通过int类型的指针进行转换。
总的来说,第一个表示的是通过int类型的指针来指向一个Myclass类型的对象,而第二个则直接创建了一个Myclass类型的指针变量。这两种方式在使用和处理对象时可能会有不同的方式和需求。
阅读全文