最近我需要使用一个学生结构体数组(结构体包含GPA、年龄、姓名和年级等级)。我首先创建了以下数组:
struct Student
{
//struct info
}
int main()
{
Student s1, s2, s3, s4, s5;
Student sArr[5] = {s1, s2, s3, s4, s5};
}
我继续使用循环来填写信息。但是,当我打印时,我使用了特定的结构名称。
cout << s1.age;
我得到了一个荒谬的数字。然后我通过删除s1到s5,简单地像这样打印出数组:
cout << sArr[0].age;
我原以为数组会存储特定的结构体,就像我声明的那些。但是我发现s1.age和sArr[0].age并不相同。这是为什么呢?我以为数组存储了结构体s1,而sArr[0]只是指向结构体s1的引用。
Student sArr[5];
就能达到同样的效果(除了访问未初始化对象的未定义行为)。 - Igor TandetniksArr[0]
被初始化为s1
的内容。如果你编辑其中任意一个,它不会影响另一个,因为它们的信息没有存储在相同的地址上。 - absoluteAquariansArr
中会有什么。最糟糕的情况是内容是不确定的。如果默认构造函数提供了确定的数据,那太棒了(它可能会,但我们不知道,因为您没有向我们展示任何内容)。从“荒谬的数字”内容的声音来看,它很可能没有,而且您的程序会调用UB。如果是这种情况,您可能需要修复它。 - WhozCraig