Qu'est-ce que la valeur par défaut de membres d'un tableau de char en C?
Dire que j'ai créer un char
tableau, et je suppose que le char tableau est vide. Si je vérifie la valeur du premier élément du tableau (arr[0]
), ce qui serait le résultat de cette expression?
- Ce qui s'est passé lorsque vous avez essayé?
- "Je suppose que le char tableau est vide' -- Que voulez-vous dire par cela?
- Aussi, que voulez-vous dire par "j'initialise un tableau de char'? Si vous avez initialisé, alors il aura la valeur de l'initialiseur, mais je pense que vous n'avez pas vraiment signifie "initialiser". Vous pourriez résoudre quelques questions (et peut-être éviter les atrocement de mauvaises réponses ci-dessous) mais l'affichage de votre code.
- Vous avez besoin d'ajouter plus de détails à votre post original, comme le résultat de l'impression de la valeur, et ce qui vous attend. Quelles langues avez-vous des études avant? Je demande ça, parce que je suis convaincu qu'avec tous les Python, Perl, Ruby, et à la Scala de connaissances là-bas, certaines personnes de l'apprentissage C peut que quelque chose de spécial qui se passe quand vous testez une valeur dans un tableau
- Downvote parce @user1723575 pourrait facilement avoir répondu à cette question lui-même en l'essayant, ou une recherche rapide sur google (ou de débordement de pile de recherche pour cette question). Je ne vois pas pourquoi il y a 5 réponses à cette question triviale.
- J'ai googlé "char array valeur initiale" aujourd'hui (en 2014). Ce débordement de pile question a été le premier touché. J'ai presque pensé que c'était un gaspillage de mon temps de venir ici parce que la question avait été downvoted et "fermés que pas une vraie question". Heureusement, John Bode réponse que m'a donné la réponse que je cherchais.
- Je suis d'accord avec @TimGradwell, la réponse ci-dessous aidé et j'ai compris ce que l'utilisateur demande. Le demandeur aurait pu utiliser un peu d'aide de la communauté pour rendre la question plus claire. Lorsque vous êtes nouveau à la programmation, vous n'aurez pas le vocabulaire pour exprimer ce dont vous avez besoin (d'où la question de modifier la capacité par la communauté).
Vous devez vous connecter pour publier un commentaire.
Ça dépend où et comment le tableau est déclaré.
Si le tableau est déclaré à la portée (en dehors de toute fonction), ou est déclaré
static
, et n'exige pas explicitement que l'initialiseur, puis le contenu du tableau est initialisé à 0.Si le tableau est déclaré dans le bloc de portée (à l'intérieur d'une fonction ou bloc) et n'est pas déclaré
static
, et n'exige pas explicitement que l'initialiseur, puis le contenu de la matrice sont indéterminée (essentiellement, des ordures, des valeurs, de ce qui peut être piège des représentations).Si le tableau a été explicitement initialisée, il contient tout ce qui était dans l'initialiseur.
MODIFIER
En réponse aux commentaires ci-dessous, notez que vous ne devriez pas compter sur les implicites d'initialisation pour le bloc-portée des variables. Si vous avez besoin d'un bloc-champ d'application de tableau à zéro sur la création, l'utilisation d'un initialiseur:
Quand il y a moins d'éléments dans l'initialiseur, qu'il y a dans le tableau, les éléments de la matrice correspondant à des éléments de l'initialiseur, sera réglé à la valeur spécifiée; toutes les autres entrées seront implicitement initialisé comme si elles ont été déclarées
static
.Dans l'exemple ci-dessus, cela signifie que le premier élément de
foo
est définie explicitement0
, alors que tous les autres éléments sont implicitement la valeur0
.char foo[N] = {};
.Si c'est un
auto
variable, il sera rempli d'ordure, sauf si vous explicitement initialiser, il n'y a pas de valeur par défaut.arr[0]
sera susceptible de contenir un semblant de valeur aléatoire jusqu'explicitement modifié pour contenir quelque chose d'autre.Bien sûr, si vous avez initialisé le tableau (ce qui signifie que vous avez remplis le tableau avec les valeurs initiales explicitement en utilisant quelque chose comme
memset()
ou unfor
boucle ou un appel de fonction ou par tout autre moyen), vous obtiendrez exactement ce que vous attendez: la valeur à laquelle vous avez initialisé il.Ne remarque bien la différence entre la déclaration et l'initialisation.
À (1), vous êtes à la déclaration d'une
auto
variable de type entier. Il a une valeur non définie pour l'instant (junk). Au (2), vous êtes à l'initialisation de la variable. Il a maintenant la valeur de10
.Bien sûr, la déclaration et l'initialisation peut à la fois être fait à la fois:
La même chose est vraie pour les tableaux:
ou, pour déclarer et initialiser:
Jamais s'attendre à tout de la variable d'avoir une certaine valeur lors de la première initialisation, sauf si vous spécifiez explicitement. Il sera rempli avec des trucs aléatoires, sauf si vous définissez vous-même.
lorsque initier tableau. vous êtes à l'allocation d'une mémoire statique. et alors vous obtiendrez les valeurs de l'allocation de mémoire donc c'est aléatoire les valeurs
si vous souhaitez définir l'ensemble du tableau à 0 alors (Selon Chasseur McMillen Remarque)
ou de l'utilisation
memset()
fonctionchar arr[size] = { 0 }