Je pense toujours que si je déclare ces trois variables, elles auront toutes la valeur 0
int column, row, index = 0;
Mais je trouve que seul l'index est égal à zéro et les autres sont indésirables comme 844553 et 2423445.
Comment puis-je initialiser toutes ces variables à zéro sans déclarer chaque variable sur une nouvelle ligne?
int* a, b, c;
ne fait pas ce à quoi il ressemble).=0
pour chacune dans leurs définitions. Et, si vous voulez vraiment beaucoup de variables, essayez un tableau:int a[10]={0}
initialisera chacunea[i]
à 0 pour vous.Réponses:
la source
Lorsque vous déclarez:
Seul l'index est mis à zéro.
Cependant, vous pouvez faire ce qui suit:
Mais personnellement, je préfère ce qui a été souligné.
C'est une forme plus lisible à mon avis.
ou
la source
bool previousInputValue, presentInputValue;
) ou si elles sont simplement du même type maintenant mais n'ont pas vraiment besoin de l'être (uint8_t height, width;
pourraient deveniruint8_t height; uint16_t width;
dans le futur et auraient dû êtreuint8_t height; uint8_t width;
pour commencer).uint8_t height; uint16_t width;
au lieu deuint8_t height, width;
sauve 10 caractères dans le futur. :-) vous pouvez bien sûr le faire comme vous le souhaitez. Assurez-vous simplement de le rendre facilement lisible. La dernière forme est donc la plus explicite.int presentValue = 0; typeof(presentValue) previousValue = presentValue;
, mais je crois quetypeof()
c'est une extension GCC non standard.Comme l'a dit @Josh, la bonne réponse est:
Vous devrez faire attention à la même chose avec des pointeurs. Ce:
Est équivalent à:
la source
unsigned long x, y;
déclaréx
commeunsigned long
maisy
aussi justeunsigned
, akaunsigned int
! C'est exactement la même chose! </rant>int *a
moyen*a
représente uneint
valeur.void* a
compilera etvoid *a, b, c
ne le fera pas. Cette rationalisation fonctionne pour moi.Si vous déclarez une variable / objet par ligne, non seulement cela résout ce problème, mais cela rend le code plus clair et évite les erreurs stupides lors de la déclaration des pointeurs.
Pour répondre directement à votre question, vous devez initialiser chaque variable à 0 explicitement.
int a = 0, b = 0, c = 0;
.la source
Notez que ce formulaire fonctionnera également avec les types personnalisés, en particulier lorsque leurs constructeurs acceptent plus d'un argument.
la source
auto
...): int colonne { 0 } , ligne { 0 } , index { 0 } ;À partir de 2k18, vous pouvez utiliser des liaisons structurées :
Demo
la source
Approches possibles:
memset
ou{0}
le tableau.struct
, et /memset
ou ayez un constructeur qui les initialiserait à zéro.la source
Je ne recommanderais pas cela, mais si vous aimez vraiment le fait d'être une ligne et d'écrire 0 une fois seulement, vous pouvez également le faire:
la source
Comme d'autres l'ont mentionné, à partir de C ++ 17, vous pouvez utiliser des liaisons structurées pour plusieurs affectations de variables.
En combinant cela
std::array
et déduction des arguments de modèle , nous pouvons écrire une fonction qui attribue une valeur à un nombre arbitraire de variables sans répéter le type ou la valeur .Demo
la source
Lorsque vous déclarez une variable sans l'initialiser, un nombre aléatoire de la mémoire est sélectionné et la variable est initialisée à cette valeur.
la source