为什么我们再次从结构对象创建结构变量?
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;
//...
}
相关文章:
- 为什么我们再次从结构对象创建结构变量?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 结构对象的指针成员在传递给函数时被修改
- C++ 提升 - 包含类层次结构对象的类的序列化
- 如何将变量从变量传递到指针结构对象
- 在 boost::heap::p riority_queue 中推送结构对象时出错
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?
- 为什么结构对象不是类型?
- 程序不会编译,使用带有结构对象的数组
- 在类构造函数中初始化自定义结构对象的正确方法
- 使用QString或字符串调用结构对象
- 在输入结构对象的输入过程中运行时间错误
- C 中的堆是否包含类和结构对象,或者仅包含指针
- 如何将部分初始化的结构对象放入向量
- 如何分配给结构对象的成员
- 尝试创建结构对象,在位置0x3FE00000中创建访问冲突写入错误
- erase() 不适用于结构/对象内的 STL 向量
- 将指向参数个数可变的函数的指针存储在结构对象中
- 如何通过先前存储的ID从结构对象中检索值?C
- 非结构对象布局