3

这是C++ 第 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];
}

输出: 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

为什么?

4

3 回答 3

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

将 a 初始化为:

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

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

于 2013-07-29T14:25:34.257 回答
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;
于 2013-07-29T14:28:06.017 回答
0

你不能像那样初始化数组。在第二个示例中,您的结构有一个 int 和一个 int 数组。您的初始化a不对应于任何内容,因此编译器会为您部分填充它。

您可以编写a = {5, {10, 20, 30}}make a.simple_intbe5和 make a.arrbe 这三个值的数组。

于 2013-07-29T14:27:39.063 回答