这是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
为什么?
答案 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个值的数组。