Définir entier (int); Ce qui est la valeur par défaut?
int i;
int data[5] = {0};
data[0] = i;
Quelle est la valeur dans les données[0]?
Aussi, quelle est la signification de cette ligne?
if (!data[0]) { ... }
OriginalL'auteur Naim Ibrahim | 2010-12-26
Vous devez vous connecter pour publier un commentaire.
Dans la plupart des cas, il n'y a pas de valeur "par défaut" pour un
int
objet.Si vous déclarez
int i;
en tant que (non statique) variable locale à l'intérieur d'une fonction, il a une valeur indéterminée. Il est initialisé et vous ne pouvez pas l'utiliser jusqu'à ce que vous écrivez une valeur valide.C'est une bonne habitude à prendre explicitement initialiser un objet lorsque vous déclarez.
int
type", pasint
objet, à droite? 🙂Les Types n'ont pas de valeurs. Les objets ont des valeurs. Un objet qui n'est pas explicitement initialisée pourrait avoir une certaine valeur par défaut dans certaines langues (ou même en C, dans certaines circonstances).
Parce que c'est le résultat qui vous est arrivé quand vous avez compilé le programme avec votre compilateur avec certains paramètres, à un moment donné. Quand j'ai compiler et exécuter ce programme, j'obtiens une sortie de
-858993460-858993460-858993460-858993460-858993460
. Il est probable que votre compilateur est l'initialisation à zéro de la mémoire pour vous. Le mien, Visual C++ standard paramètres de génération de débogage, est pré-initialisation des objets non initialisées avec0xcc
de sorte qu'ils sont plus facilement détectés.Tu as de la chance, ou de votre compilateur met en œuvre une valeur par défaut de zéro. Mais le C ANSI spec ne pas spécifier une valeur par défaut pour les non-membres de données statiques. Et je n'ai jamais vu un compilateur spec définir de cette façon.
Un "objet" à la fois en C et C++ est juste "une région de stockage." C'est une séquence d'octets qui représentent quelque chose.
OriginalL'auteur James McNellis
Il dépend de l'endroit où le code est écrit. Considérer:
La valeur attribuée à
data[0]
dansfunc1()
est complètement déterministe; il doit être à zéro (en supposant qu'aucun autre les missions ont interféré avec les valeurs des variables globalesi
etdata
).En revanche, la valeur définie dans
func2()
est complètement indéterminé; vous ne pouvez pas affirmer de manière fiable la valeur sera attribuée àdata[0]
, car aucune valeur n'a été clairement assignée ài
dans la fonction. Il sera probablement une valeur sur la pile d'un certain appel de la fonction, mais qui dépend du compilateur et le programme et n'est même pas "la mise en œuvre définie", c'est un pur comportement indéfini.Vous aussi demander "Quel est le sens de cela?"
Le "
!
' opérateur ne une logique d'inversion de la valeur, il est appliqué: il cartes de zéro à un, et des cartes de toute valeur différente de zéro à zéro. L'ensemble de la condition renvoie true si l'expression renvoie une valeur non nulle. Donc, sidata[0]
est 0,!data[0]
cartes à 1 et le code dans le bloc est exécuté; sidata[0]
n'est pas 0,!data[0]
cartes à 0 et le code dans le bloc n'est pas exécutée.Elle est utilisée couramment dans le langage parce qu'il est plus succinct que l'alternative:
Vraiment, je ne comprends pas pourquoi vous dites que la valeur attribuée aux données[0] dans func1 est entièrement déterministe.. il semble 100% de durée indéterminée, tant que je n'a pas été initialisé
Dans le contexte de
func1()
,i
est une variable globale et mondiale (int
) les variables sont initialisées à 0, sauf si il y a une autre initialiseur spécifié. (L'histoire est un peu plus complexe pour certains autres types, mais toutes les variables globales sont initialisées, soit à une valeur spécifiée ou à "zéro".) Maintenant, si un autre code a modifié la valeur dei
, alors que la valeur attribuée àdata[0]
ne sera pas nécessairement 0, mais la valeur est toujours défini et pas de durée indéterminée.OriginalL'auteur Jonathan Leffler
Si un nombre entier n'est pas initialisé, sa valeur n'est pas définie par C
OriginalL'auteur JRK
Depuis que vous avez inclus la
={0};
, le tableau entier est rempli avec des zéros. Si cela est défini en dehors de toute fonction, il serait initialisé avec des zéros, même sans l'initialiseur.if (!data[x])
est équivalent àif (data[x] == 0)
.data[0]
est ensuite mis ài
. L'OP se résume à s'interroger sur ce que la valeur dei
est, puisqu'il n'a pas été attribué.merci. j'apprécie vraiment votre réponse.
OriginalL'auteur Jerry Coffin
si un nombre entier est déclarée à l'échelle mondiale alors qu'il est initialisé automatiquement à zéro
mais si c'est local contient alors la valeur d'ordures jusqu'à ce que et à moins que l'itis compte tenu de la valeur
OriginalL'auteur mukesh
//Fichier.c'
//résultats de l'essai
OriginalL'auteur Kevin Meredith