[英]Why can't we directly initialise a variable in struct using scanf?
[英]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.