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

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;
   //...
}