-1

仕組み:

int main()
{
    int * ch = NULL;
    cout<<"Hello"<<ch<<"World"<<endl;;
    cout<<"Hello world1"<<endl;
    return 0;`
 }

これは失敗しますが:

int main()
{
    char * ch = NULL;
    cout<<"Hello"<<ch<<"World"<<endl;;
    cout<<"Hello world1"<<endl;
    return 0;`
}
4

1 に答える 1

0

ほとんどのポインター型では、

cout << ptr;

ポインター値の実装定義の表現 (通常は 16 進形式のアドレス) を出力します。しかし、の場合、ポインタを0 で終了する配列の最初のポインタとして解釈し、ように出力するためchar*にがオーバーロードされます。operator<<()charcharprintf("%s", ptr);

ヌル ポインターが指すアドレスを出力することは無害です。ヌル ポインターに続いて、それが指す場所から始まるバイトを解釈することは未定義の動作であり、多くの場合、セグメンテーション フォールトにつながります。

于 2013-01-15T21:15:10.470 に答える