J'ai créé un tableau dynamique et j'ai besoin d'initialiser tous les membres à 0.
Comment cela peut-il être fait en C?
5 Réponses :
Dans ce cas, vous utiliseriez §6.2.6.2 Garantie ceci pour travailler: P> Pour tout type d'entier, la représentation de l'objet où tous les bits sont
zéro doit être une représentation de la valeur zéro dans ce type. p>
blockQuote> Il est également possible de faire une combinaison de calloc () code>:
MALLOC () code> +
MEMSET () code>, mais pour des raisons discutées dans le Comments de cette réponse , il est probable que c'est probablement plus efficace d'utiliser
calloc () code>. p> p>
C'est plus que «sûr de supposer», je dirais que cela est en fait garanti par l'§ 6.2.6.2.
@ Mysticial Il est garanti par la norme (C99, 6.2.6.2P5) "pour tout type d'entier, la représentation de l'objet où tous les bits sont zéro doivent être une représentation de la valeur zéro de ce type."
Oui, vous avez raison, j'ai trouvé la ligne qui dit cela. Ajouter à ma réponse.
Valeur bits => "Chaque bit qui est une valeur de valeur doit avoir la même valeur que le même bit dans la représentation de l'objet du type non signé correspondant"; Signe Bits => "Si le bit de signalisation est zéro, il n'affectera pas la valeur résultante." Les bits de rembourrage ne sont pas pertinents.
La distribution est inutile aussi dans C.
@Matteoitalia désolé, je n'ai pas eu votre réponse affichée quand j'ai répondu
@Mat correct, ce n'est pas nécessaire. J'essayais principalement de préserver l'échantillon de l'OP. Bien que la distribution puisse toujours être utile si le code est jamais porté à C ++.
@ Mysticial: J'espère que la conversion en C ++ se débarrasserait de ce Malloc code> tout à fait et remplacez-le par des conteneurs appropriés :)
Utiliser calloc code> fonction ( Exemple d'utilisation ):
int *array = calloc(n, sizeof(int));
array = calloc(n, sizeof(int));
memset(array, 0, n * sizeof *array);
for (i=0; i<x; ++i){ array[i]=0; } That should do the trick. I guess you have to make a loop that makes 0 every element in the array. Memset could also work for you.
Hé, vous n'avez pas à écrire de programme qui prouve de manière interactive la réponse correcte. Trouver la ligne une ligne qui fait l'affaire dans cette source est bien plus difficile ...
@dgunduve Oui, vous avez raison mais j'écris simplement quelque chose de similaire dans C ARM lorsque j'ai vu la question par hasard et pensé à une réponse rapide. :)