26

重複の可能性:
CおよびC ++:自動構造の部分的な初期化

Code Completeを読んでいるときに、C++配列の初期化の例に出くわしました。

float studentGrades[ MAX_STUDENTS ] = { 0.0 };

C ++が配列全体を初期化できることを知らなかったので、テストしました。

#include <iostream>
using namespace std;

int main() {
    const int MAX_STUDENTS=4;
    float studentGrades[ MAX_STUDENTS ] = { 0.0 };
    for (int i=0; i<MAX_STUDENTS; i++) {
        cout << i << " " << studentGrades[i] << '\n';
    }
    return 0;
}

プログラムは期待される結果をもたらしました:

0 0
1 0
2 0
3 0

ただし、初期化値をから0.0に変更すると、次のようになり9.9ます。

float studentGrades[ MAX_STUDENTS ] = { 9.9 };

興味深い結果が得られました:

0 9.9
1 0
2 0
3 0

初期化宣言は配列の最初の要素のみを設定しますか?

4

2 に答える 2

41

最初のN位置は中括弧内の値に初期化するだけで、他のすべての位置は0に初期化されます。この場合、Nは初期化リストに渡した引数の数です。

float arr1[10] = { };       // all elements are 0
float arr2[10] = { 0 };     // all elements are 0
float arr3[10] = { 1 };     // first element is 1, all others are 0
float arr4[10] = { 1, 2 };  // first element is 1, second is 2, all others are 0
于 2012-10-08T22:29:09.923 に答える
5

いいえ、デフォルトの初期化値(数値型の場合はゼロ)に明示的に設定されていないすべてのメンバー/要素を設定します。

于 2012-10-08T22:14:36.700 に答える