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];
}

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

なんで?

4

3 に答える 3

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

を次のように初期化します。

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

そのような配列を初期化することはできません。2 番目の例では、構造体に int と int の配列があります。の初期化はa何にも対応していないため、コンパイラが部分的に埋めます。

a = {5, {10, 20, 30}}make a.simple_intbe5と make a.arrbe をこれら 3 つの値の配列に書くことができます。

于 2013-07-29T14:27:39.063 に答える