2017-10-15 18 views
-2

IはC++配列にヌルターミネータの使用について学習されており、なぜ例えば0配列をヌルターミネータに初期化すると、メモリ内のすべてのセクションが "null"にならないのはなぜですか?

にそれを初期化と同じように動作しないヌルターミネータに配列を初期化するように混同されている:

I 0にsetOfCharactersを初期化すると、アレイ内のすべてのメモリ位置は、を用いて開始する0を保持していることを意味することを知っている

char setOfCharacters [15] = {0}; 

に比べ

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

。しかし、配列をヌルターミネータに初期化するとき、なぜ同じ働きをしないのですか?実際に

+2

"*でも、配列をヌルターミネータに初期化するときと同じ働きはしないのですか? –

+0

両方とも同じように動作するはずです。あなたは[mcve]が必要です。 – juanchopanza

+1

困惑。この場合、 '\ 0'と '0'は同じことになります。デモ:https://ideone.com/g5h4DF – user4581301

答えて

1

char setOfCharacters [15] = {0}; 

チャーsetOfCharactersに相当し、この初期化[15] = {(CHAR)0}。 char型のオブジェクトに0を設定

'\0'リテラル文字を使用して記述することができます。

明示的に初期化されなかったアレイの他のすべての要素がゼロに初期化され、両方の初期化

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

char setOfCharacters [15] = {0}; 

結果。

は比較

'\0' == 0 

は常にtrueをもたらすことを考慮してください。この比較の文字リテラルはタイプintに昇格されます(たとえば、Cでは定義による文字定数の型がintです)。

+0

@Tas私は、「もっと」明確にするために「また」という言葉を削除してフレーズを更新しました。 –

関連する問題