繁体   English   中英

为什么我们再次从 struct 对象创建 struct 变量?

[英]why we are again creating struct variable from struct object?

我是 C++ 的初学者。 这是我的疑问,为什么在这个程序中他们再次从以前创建的结构对象创建结构变量? 这是示例:

typedef struct prog1
{

int a,b;

}*obj1;

int main()
{

obj1 moc=new prog1(); // why again creating object for *obj1 object?
moc->a=10;  // why dont we use obj1 -> a=10;

}

谢谢

obj1不是对象而是类型定义,因为它是typedef定义的一部分。 即,它是一种prog1* (指向prog1的指针)。 obj1 moc声明了一个这种类型的变量,即moc是一个指向prog1的指针。

为了更清楚地使用别名声明而不是 typedef 定义。

struct prog1
{

int a,b;

};

using obj = struct prog1 *;

所以名称obj是类型struct prog1 *的别名。 obj不是变量。

所以在这个声明中

obj1 moc; 

定义了类型为obj的变量moc 此声明等效于以下声明

prog1 *moc;

也就是说,声明了一个prog1 *类型的指针。

注意指针没有初始化。 所以它具有不确定的价值。 结果是下面的语句

moc->a=10;

调用未定义的行为。

您不需要在 struct 之前使用typedef 您可以直接使用 prog1 作为类型。 像这样:

struct prog1 {
    int a,b;
} obj1;   //<---create right away the obj1.

int main() {
   prog1 obj2;  //<---another object created.
   prog1 *pObj = new prog1();

   obj1.a = 10;
   obj2.a = 20;
   pObj->a = 30;
   //...
}

或者您甚至不需要prog1结构名称。 像这样:

struct {
    int a,b;
} obj1, obj2, *pObj;   //<---obj1 and obj2 already has allocated space for data.

int main() {
   pObj = new prog1();  //<---allocate data space that will be pointed by pObj.

   obj1.a = 10;
   obj2.a = 20;
   pObj->a = 30;
   //...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM