簡體   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