12

重複の可能性:
char データのアドレスが表示されないのはなぜですか?

コードと出力は次のとおりです。

int main(int argc, char** argv) {

    bool a;
    bool b;

    cout<<"Address of a:"<<&a<<endl;
    cout<<"Address of b:"<<&b<<endl;

    int c;
    int d;

    cout<<"Address of c:"<<&c<<endl;
    cout<<"Address of d:"<<&d<<endl;

    char e;    
    cout<<"Address of e:"<<&e<<endl;

    return 0;
}

出力:

a:0x28ac67 のアドレス

b:0x28ac66 のアドレス

c:0x28ac60 のアドレス

d:0x28ac5cのアドレス

eのアドレス:

私の質問は次のとおりです。文字のメモリアドレスはどこですか? そして、なぜそれは印刷されないのですか?

ありがとうございました。

4

3 に答える 3

16

C/C++ の文字列はchar*、 と同じ型ので表すことができます&e。したがって、コンパイラは、文字列を出力しようとしていると考えます。アドレスを出力したい場合は、 にキャストできますvoid*

std::cout << static_cast<void *>(&e) << std::endl;
于 2012-11-23T20:19:48.370 に答える
11

のオーバーロードされたchar *バージョンostream::operator<<は、NUL で終了する C 文字列を想定していると思われます。また、1 文字のアドレスのみを渡しているため、ここにあるのは未定義の動作です。void *期待どおりに出力するには、アドレスを a にキャストする必要があります。

cout<<"Address of e:"<< static_cast<void *>(&e) <<endl;
于 2012-11-23T20:20:05.640 に答える
2

この以前の質問を確認してください: char データのアドレスが表示されないのはなぜですか?

また、それを活用すればprintf("Address of e: %p \n", &e);うまくいきます。

于 2012-11-23T20:29:03.583 に答える