web-dev-qa-db-ja.com

C ++ float配列の初期化

可能性のある複製:
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

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

19
Adam Matan

空の中括弧以外を使用する場合、最初の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
28
Ed S.

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

5
Marcelo Cantos