StanleyLipmannによるC++Primer(4th Edition)によると、50ページに次のように書かれています。
「関数本体の外部で定義された変数は0に初期化されます。」
私が読んだことによると、それは真実ではないようです。
グローバルchar
はデフォルトで空白であり、0ではありません。
助けていただければ幸いです。
StanleyLipmannによるC++Primer(4th Edition)によると、50ページに次のように書かれています。
「関数本体の外部で定義された変数は0に初期化されます。」
私が読んだことによると、それは真実ではないようです。
グローバルchar
はデフォルトで空白であり、0ではありません。
助けていただければ幸いです。
スタンレーは正しいです—静的な保存期間を持つオブジェクトは、他の初期化が行われる前にゼロで初期化されます。
したがって、あなたの用語では、グローバルchar
は「デフォルト」になってい0
ます。これは整数0
であり、文字(通常は)ではありません。これをコンソールにストリーミングしようとすると、この値には人間が読める形式がないため、何も表示されません。'0'
48
char
グローバルchar*
またはを意味する場合char const*
、これも「デフォルト」に設定され0
ます。つまり、nullポインタになります。これは、空の文字列へのポインタと同じではありません。これをストリーミングしようとすると、未定義の動作が発生するため、何も表示されないか、ASCIIアート変換レイヤーの背後にある20Hzで解釈ダンスの形で提示されたトマトスープの私の母のレシピを表示できます。
どちらも「空白」にはなりませんが、ここで「空白」が何を意味するのかを知らなければ、絶対に確実にそれを言うことはできません。
これを試して:
#include <iostream>
char global;
int main()
{
std::cout << "Value of Global " << ((int)global) << "\n";
}
global
これは静的ストレージ期間オブジェクトであり、ゼロで初期化されます。
私はそれを(非常に怠惰に)整数にキャストして、ストリームがゼロであることを示すためだけに(文字ではなく)その値を出力するようにしました。
char'\ 0'を印刷しても、有用なものは何も印刷されません。
'0'
ではありません0
。0に初期化されていると表示されている場合は、文字(ASCIIエンコードでは48 )ではなく、値0
(\0
または)を意味します。NULL
'0'