2012-10-08 59 views
13

可能重複:c + +浮動陣列初始化

float studentGrades[ MAX_STUDENTS ] = { 0.0 }; 

我沒有:
C and C++ : Partial initialization of automatic structure

在閱讀Code Complete,我跨越C++數組初始化例子來知道C++可以初始化e ntire陣列,所以我測試過它:

#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 

初始化聲明是否只設置數組中的第一個元素?

回答

21

如果您使用除空括號以外的任何內容,那麼您只會將前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 
+0

不要忘記你可以使用一個空的初始化列表,在這種情況下* all *元素被設置爲零。 –

+0

@MarkRansom:是的,我會補充一點,謝謝。 –

+0

你讓它聽起來像0是一種特殊情況,但事實並非如此。它將第一個元素設置爲0,然後將其餘元素設置爲0. –

5

不,它將所有未明確設置爲默認初始化值的成員/元素設置爲數字類型爲零。