C ++中结构的奇怪行为[第2部分]

时间:2013-07-29 14:22:22

标签: c++

这是Strange behaviour of structures in C++ part 1

的延续

如果我这样做

#include<iostream>

using namespace std;

struct box
{
    //int simple_int;
    int arr[3];
};
int main()
{
    box a={10,20,30};
    //box b={100};
    //cout<<b.simple_int<<"\n";
    cout<<a.arr[0];
}

OUTPUT: 10这是正确的。

但如果我删除评论。

#include<iostream>

using namespace std;

struct box
{
    int simple_int;
    int arr[3];
};
int main()
{
    box a={10,20,30};
    box b={100};
    cout<<b.simple_int<<"\n";
    cout<<a.arr[0];
}

输出: 100 20 //instead of 100 10

为什么?

3 个答案:

答案 0 :(得分:10)

box a = {10, 20, 30};

将初始化为:

a.simple_int = 10;
a.arr = {20, 30, 0};

当您输出a.arr[0]时,它会按预期输出20。

答案 1 :(得分:3)

您的代码提供正确的输出。

您的结构将在以下位置初始化:

a.simple_int = 10;
a.arr = {20, 30, 0};

所以a.arr[0]将是20。

您的计划输出:100 20按预期进行。

如果您想避免这种误解,请将结构初始化为:

box a = { 100, { 10, 20, 30 } };

有了这个,结果就是:

a.simple_int == 100;
a.arr[0] == 10;

答案 2 :(得分:0)

您不能像这样初始化数组。在第二个示例中,您的struct具有int和int数组。您a的初始化与任何内容都不对应,因此编译器会为您部分填充它。

您可以写a = {5, {10, 20, 30}}以使a.simple_int成为5,并使a.arr成为这3个值的数组。