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};
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.
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 :)
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;