假设
char a='s';
Run Code Online (Sandbox Code Playgroud)
现在我想在char指针p中存储变量a的地址
char *p=&a;
Run Code Online (Sandbox Code Playgroud)
如果我使用cout << p;然后我得到值s,而不是地址!
任何人都可以解释为什么会这样?
该basic_ostream的<<运营商是专门为const char*参数*,输出它像一个C字符串**.请参阅答案为什么cout打印char数组与其他数组不同?了解更多细节.
基本上,你可以投p给void*印刷得到的地址时.
cout << static_cast<void*>(p);
Run Code Online (Sandbox Code Playgroud)
*:另外const charT*其中charT是由所采用的字符类型basic_ostream,并const unsigned char*和const signed char*如果所述charT == char.例如,wcout将a const wchar_t*视为(宽)C字符串,但cout会将其视为指针.
**:这是由于使用的角色特征而过度basic_ostream.有关详细算法,请参阅C++标准§[ostream.inserters.character]/4.