cout << with char* argument prints string, not pointer value

后端 未结 6 1342
旧时难觅i
旧时难觅i 2020-11-21 07:39

This:

const char * terry = \"hello\";
cout<

prints hello instead of the memory address of the \'h\'.

6条回答
  •  Happy的楠姐
    2020-11-21 07:57

    The reason for that is that std::cout will treat a char * as a pointer to (the first character of) a C-style string and print it as such. If you want the address instead, you can just cast it to a pointer that isn't treated that way, something like:

    cout << (void *) terry;
    

    (or use the const void * cast if you're worried about casting away constness, something that's not an issue in this particular case).


    If you're more of a purist than pragmatist, you can also use the C++ static_cast, along the lines of:

    cout << static_cast  (terry);
    

    though it's unnecessary in this particular case, the cast to a void * will work fine. The following sample code shows all these options in action:

    #include 
    int main (void) {
        const char *terry = "hello";
        std::cout << terry << '\n';
        std::cout << (void *) terry << '\n';
        std::cout << (const void *) terry << '\n';
        std::cout << static_cast (terry) << '\n';
        return 0;
    }
    

    outputting (the address may be different in your environment):

    hello
    0x8048870
    0x8048870
    0x8048870
    

    Note that, when using the static_cast, you should ensure you don't try to cast away the constness with static_cast (that's what const_cast is for). This is one of the checks done by the newer C++ casts and the old-style cast does not have this limitation.

提交回复
热议问题