1

StanleyLipmannによるC++Primer(4th Edition)によると、50ページに次のように書かれています。

「関数本体の外部で定義された変数は0に初期化されます。」

私が読んだことによると、それは真実ではないようです。

グローバルcharはデフォルトで空白であり、0ではありません。

助けていただければ幸いです。

4

3 に答える 3

9

スタンレーは正しいです—静的な保存期間を持つオブジェクトは、他の初期化が行われる前にゼロで初期化されます。

したがって、あなたの用語では、グローバルchar 「デフォルト」になってい0ます。これは整数0であり、文字(通常は)ではありません。これをコンソールにストリーミングしようとすると、この値には人間が読める形式がないため、何も表示されません。'0'48char

グローバルchar*またはを意味する場合char const*、これも「デフォルト」に設定され0ます。つまり、nullポインタになります。これは、空の文字列へのポインタと同じではありません。これをストリーミングしようとすると、未定義の動作が発生するため、何も表示されないか、ASCIIアート変換レイヤーの背後にある20Hzで解釈ダンスの形で提示されたトマトスープの私の母のレシピを表示できます。

どちらも「空白」にはなりませんが、ここで「空白」が何を意味するのかを知らなければ、絶対に確実にそれを言うことはできません。

于 2012-12-22T20:11:01.140 に答える
6

これを試して:

#include <iostream>
char global;

int main()
{
    std::cout << "Value of Global " << ((int)global) << "\n";
}

globalこれは静的ストレージ期間オブジェクトであり、ゼロで初期化されます。
私はそれを(非常に怠惰に)整数にキャストして、ストリームがゼロであることを示すためだけに(文字ではなく)その値を出力するようにしました。

char'\ 0'を印刷しても、有用なものは何も印刷されません。

于 2012-12-22T20:15:51.623 に答える
3

'0'ではありません00に初期化されていると表示されている場合は、文字(ASCIIエンコードでは48 )ではなく、値0\0または)を意味します。NULL'0'

于 2012-12-22T20:10:32.560 に答える