45 votes

Comment initialiser seulement quelques éléments d'un tableau avec des valeurs?

Cela peut être une question stupide, mais est-il possible d'affecter certaines valeurs d'un tableau à la place de tous? Pour clarifier ce que je veux:

Si j'ai besoin d'un tableau comme {1,0,0,0,2,0,0,0,3,0,0,0} je peux le créer comme:

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

La plupart des valeurs de ce tableau sont de "0". Est-il possible de sauter cette les valeurs et l'affecter uniquement les valeurs 1, 2 et 3? Je pense à quelque chose comme:

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

83voto

haccks Points 33022

Est-il possible de sauter cette les valeurs et l'affecter uniquement les valeurs 1, 2 et 3?

En C, Oui. Utilisation désigné initialiseur (ajouté en C99 et non pris en charge en C++).

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

Au-dessus de l'initialiseur d'initialiser élément 0, 4 et 8 tableau array avec des valeurs 1, 2 et 3 respectivement. Reste éléments seront initialisés avec 0. Ce sera l'équivalent de

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

La meilleure partie est que l'ordre dans lequel les éléments sont énumérés n'a pas d'importance. On peut écrire aussi comme

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

Mais notez que l'expression à l'intérieur d' [ ] doit être une expression constante entière.

13voto

sun qingyao Points 1584

Voici mon trivial approche:

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

Cependant, techniquement parlant, ce n'est pas "initialisation" le tableau :)

6voto

Ian Points 15625

Une autre façon de le faire serait de donner une valeur par défaut en memset pour tous les éléments du tableau, et ensuite affecter les éléments spécifiques:

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X