C++浮点数数组初始化

29
在阅读Code Complete时,我遇到了一个C++数组初始化的例子:

可能是重复内容:
C and C++ : Partial initialization of automatic structure

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

初始化声明是否只设置数组中的第一个元素?
2个回答

48

你只会将前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

不要忘记,您可以使用空初始化列表,在这种情况下,所有元素都设置为零。 - Mark Ransom
你说得好像0是个特殊情况一样,但实际上不是。这是将第一个元素设置为0,然后将其余元素设置为0。 - Joseph Mansfield
1
@sftrabbit:是的,听起来就是这样。谢谢。 - Ed S.

5
不是的,它会设置所有未经明确设置的成员/元素为它们的默认初始化值,对于数字类型来说,默认初始化值为零。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接