web-dev-qa-db-fra.com

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

Cela peut être une question stupide, mais est-il possible d'assigner des valeurs some à un tableau au lieu 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 "0". Est-il possible de sauter ces valeurs et d'affecter uniquement les valeurs 1, 2 et 3? Je pense à quelque chose comme:

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

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

En C, oui. Utilisez un initialiseur désigné (ajouté en C99 et non pris en charge en C++).

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

L'initialiseur ci-dessus initialisera l'élément 0, 4 et 8 du tableau array avec les valeurs 1, 2 et 3 respectivement. Les éléments restants seront initialisés avec 0. Ce sera équivalent à

 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 répertoriés n'a pas d'importance. On peut aussi écrire comme

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

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

73
haccks

Voici mon approche triviale:

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

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

13
nalzok

Une autre façon de le faire serait de donner la valeur par défaut de memset pour tous les éléments du tableau, puis d'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;
6
Ian