0

私たちが持っているとき:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    cout << a[0] << endl;
}

「1」を取得します。

しかし、次のように変更すると:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    int* b = &a[0];
    cout << a[0] << endl;
    cout << *b << endl;     
}

「-1219451320」のようなものを取得しますが、これは実行するたびに変化します。

bvariable so a[0]got changedの影響は何でしたか? たとえば今、前のコードに変更すると、結果は再び「1」になります。

どちらの状態でも、配列は初期化されていません! ですから、このような違いがあってはなりません。たとえば、最初のコードでは、「-12242311231」を取得してもおかしくありませんが、今では...

4

1 に答える 1

5

配列を初期化していないため、値は任意です(または可能です)。

標準では、これらを不定値と呼んでいます。

あなたが持っている2つの異なるプログラムを使用すると、2つの異なる値または同じ値を、識別可能なパターンや理由なしで取得することが期待できます(これは任意です)。同じプログラムを 2 回実行して異なる値を取得することもできます。初期化するには、書くだけです

int a[100] = {};  // All zeroes. :-)

生の配列の代わりに、の使用を検討してstd::vectorください。

#include <vector>

// ...
std::vector<int> a( 100 );    // All zeroes

自動的かつ常に初期化されます。

また、サイズ変更も可能です。

于 2012-11-16T13:10:21.817 に答える