Подтвердить что ты не робот

Инициализация массива с плавающей запятой С++

Возможный дубликат:
C и С++: частичная инициализация автоматической структуры

При чтении Code Complete я столкнулся с примером инициализации массива С++:

float studentGrades[ MAX_STUDENTS ] = { 0.0 };

Я не знал, что С++ может инициализировать весь массив, поэтому я его протестировал:

#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

Указывает ли объявление инициализации только первый элемент в массиве?

4b9b3361

Ответ 1

Если вы используете что-либо, кроме пустых фигурных скобок, вы только инициализируете первые 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

Ответ 2

Нет, он устанавливает все элементы/элементы, которые явно не установлены в значение по умолчанию для инициализации, которое равно нулю для числовых типов.