10
votes

Comment initialiser un ensemble de tableau INT dynamique à 0 en C

J'ai créé un tableau dynamique et j'ai besoin d'initialiser tous les membres à 0. Comment cela peut-il être fait en C? XXX


0 commentaires

5 Réponses :


21
votes

Dans ce cas, vous utiliseriez calloc () : xxx

Il est prudent de supposer que tous les systèmes ont maintenant toutes les bits zéro comme une représentation pour zéro.

§6.2.6.2 Garantie ceci pour travailler:

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.

Il est également possible de faire une combinaison de MALLOC () + MEMSET () , 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 () .


8 commentaires

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 tout à fait et remplacez-le par des conteneurs appropriés :)



4
votes

Utiliser calloc code> fonction ( Exemple d'utilisation ):

int *array = calloc(n, sizeof(int));


0 commentaires

7
votes
array = calloc(n, sizeof(int));

0 commentaires

0
votes
memset(array, 0, n * sizeof *array);

0 commentaires

0
votes
                    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.

2 commentaires

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