2016-08-09 16 views
37

To może być głupie pytanie, ale czy możliwe jest przypisanie wartości niektórych wartości do tablicy zamiast wszystkich? Aby wyjaśnić, co chcę:Jak zainicjować tylko kilka elementów tablicy z pewnymi wartościami?

Jeśli muszę tablicę jak {1,0,0,0,2,0,0,0,3,0,0,0} mogę tworzyć to lubią:

int array[] = {1,0,0,0,2,0,0,0,3,0,0,0}; 

Większość wartości tej tablicy są „0”. Czy można pominąć te wartości i przypisywać tylko wartości 1, 2 i 3? Myślę o czymś takim:

int array[12] = {0: 1, 4: 2, 8: 3}; 
+0

To zależy od tego, w jaki sposób zapełnisz tablicę. Czy wiesz, gdzie znajdują się prawidłowe indeksy z góry? –

+8

BTW, to jest intializacja, a nie cesja. Przypisanie do tablic nie jest możliwe w C i C++. –

Odpowiedz

66

Czy to możliwe, aby pominąć te wartości i przypisać tylko wartości 1, 2 i 3?

W C, Tak. Użyj wyznaczonego inicjalizatora (dodanego w C99 i nieobsługiwanego w C++).

int array[12] = {[0] = 1, [4] = 2, [8] = 3}; 

powyżej inicjator zainicjować elementu 0, 4 i 8 Array array z wartościami 1, 2 i 3 odpowiednio. Elementy odpoczynku zostaną zainicjowane za pomocą 0. To będzie odpowiednik

int array[12] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0}; 

Najlepsze jest to, że kolejność elementów na liście nie ma znaczenia. Można również napisać jak

int array[12] = {[8] = 3, [0] = 1, [4] = 2}; 

Należy jednak pamiętać, że wyrażenie wewnątrz [ ] powinny być całkowitą stałym wyrażeniem.

+0

To jest dokładnie to, co szukałem. Wielkie dzięki! – kaetzacoatl

+2

@WhiZTiM wyznaczone inicjalizatory to C nie C++ – 101010

+0

Czy możesz mi powiedzieć wariant tego, który pozwala na zainicjowanie wszystkich wartości tablicy do pojedynczej wartości. –

5

Alternatywnym sposobem na to byłoby dać wartość domyślną przez memset dla wszystkich elementów w tablicy, a następnie przypisać konkretne elementy:

int array[12]; 
memset(array, 0, sizeof(int) * 12); //if the default value is 0, this may not be needed 
array[0] = 1; array[4] = 2; array[8] = 3; 
+3

Co jest nie tak z 'memset (array, 0, sizeof array);'? – wildplasser

+2

To jest w porządku. używając 'sizeof (data_type) * data_type_size' - Tylko mój nawyk ... :) – Ian

12

Oto moja trywialne podejście:

int array[12] = {0}; 
array[0] = 1; array[4] = 2; array[8] = 3; 

Jednak technicznie rzecz biorąc nie jest to "inicjowanie" tablicy :)