2012-10-08 13 views
13

Powiel możliwe:
C and C++ : Partial initialization of automatic structureC++ unosić inicjalizacji tablicy

Podczas czytania Code Complete, natknąłem się na C++ przykład inicjalizacji tablicy:

float studentGrades[ MAX_STUDENTS ] = { 0.0 }; 

ja nie wiem C++ może zainicjować e ntire tablicą, więc Przetestowałem go:

#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; 
} 

Program dał oczekiwanych rezultatów:

0 0 
1 0 
2 0 
3 0 

ale zmiana wartości inicjalizacji z 0.0 do, powiedzmy, 9.9:

float studentGrades[ MAX_STUDENTS ] = { 9.9 }; 

Udostępniono interesujący wynik:

0 9.9 
1 0 
2 0 
3 0 

Czy deklaracja inicjalizacji ustawia tylko pierwszy element w tablicy?

Odpowiedz

21

Jeśli użyjesz niczego poza pustymi nawiasami klamrowymi, to tylko zainicjujesz pierwsze N ​​pozycji do tej wartości, a wszystkie inne zostaną zainicjowane na 0. W tym przypadku N jest liczbą argumentów przekazanych do listy inicjalizacji, tj.

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

Nie zapominaj, że możesz użyć pustej listy inicjalizacji, w którym to przypadku * wszystkie * elementy są ustawione na zero. –

+0

@MarkRansom: Tak, dodam to, dzięki. –

+0

Sprawiasz, że brzmi jak 0, to specjalny przypadek, ale tak nie jest. Ustawia pierwszy element na 0, a resztę na 0. –

5

Nie, ustawia wszystkie elementy/elementy, które nie zostały jawnie ustawione na ich domyślną wartość inicjalizacyjną, która wynosi zero dla typów numerycznych.