2017-10-15 16 views
-2

J'ai appris sur l'utilisation de terminateurs nuls dans les tableaux de C et je suis confus pour expliquer pourquoi l'initialisation d'un tableau à une terminaison null ne fonctionne pas le même que l'initialisation à 0.Pourquoi l'initialisation d'un tableau à un terminateur null n'entraîne-t-elle pas "null" pour chaque section en mémoire?

Par exemple:

char setOfCharacters [15] = {'\0'}; 

par rapport à

char setOfCharacters [15] = {0}; 

Je sais que l'initialisation setOfCharacters à 0 signifie que chaque emplacement de mémoire dans le tableau est titulaire d'un 0 à commencer avec. Mais pourquoi ne fonctionne-t-il pas pour quand vous initialisez un tableau à un terminateur null?

+2

"* Mais pourquoi ne fonctionne-t-il pas de la même façon lorsque vous initialisez un tableau à un terminateur null? *" Qui a dit que ce n'est pas le cas? –

+0

Ensuite, les deux devraient se comporter de la même manière. Vous avez besoin d'un [mcve]. – juanchopanza

+1

Perplexe. Dans ce cas, "\ 0" et "0" devraient aboutir à la même chose. Démo: https://ideone.com/g5h4DF – user4581301

Répondre

1

En fait, cette initialisation

char setOfCharacters [15] = {0}; 

est équivalent à

carbonisation setOfCharacters [15] = {(char) 0};

La définition de 0 sur un objet de type char peut également être écrite à l'aide du littéral '\0'.

Et les deux initialisations

char setOfCharacters [15] = {'\0'}; 

et

char setOfCharacters [15] = {0}; 

résultats que tous les autres éléments du tableau qui ne sont pas explicitement initialisé seront initialisées à zéro.

prendre en compte que la comparaison

'\0' == 0 

donne toujours true. Le caractère littéral de cette comparaison est promu au type int (par exemple, en C, la constante de caractère par définition a le type).

+0

@Tas j'ai mis à jour la phrase en supprimant le mot "aussi" pour le rendre plus clair. –