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

why we are again creating struct variable from struct object?

本文关键字:结构 对象 创建 变量 我们 为什么      更新时间:2023-10-16

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