c++ - 为什么这段代码打印的是字符串而不是地址?

标签 c++

<分区>

在此代码中,cout<<q<<endl;正在返回字符串“mani”? q 包含第一个字符“m”的地址,因此它应该打印地址而不是字符串。请解释。

int main(){
    char *q;
    char b[5]={'m','a','n','i'};
    q=&b[0];
    cout<<b<<endl;
    cout<<q<<endl;

最佳答案

std::coutconst char* 有一个特殊的重载,它将内存输出为一个 char 的数组,从指针传递到下一个 NUL 终止符(您的工作是确保有适当的内存可供使用)。

如果您想关闭此行为并输出指针地址,请使用强制转换:

std::cout << (const void*)b << endl;

关于c++ - 为什么这段代码打印的是字符串而不是地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48094402/

相关文章:

c++ - 在 Clang 和 g++ 上使用打包参数指针创建 `va_list`

C++对齐——严格和弱

c++ - 在 C++ 中确定指针限制的惯用方法是什么?

c++ - const_cast 似乎被 C++ 模板忽略了?

c++ - 如何推断 lambda 的返回类型?

c++ - GetSystemMetrics 为我的屏幕返回错误的值

c++ - 如何确保我的节点被添加到链表中

c++ - 当我获得指向智能指针的指针时,是否需要释放内存?

java - 如何使用 swig 类型映射将 std::vector<std::pair<std::string, int>> 从 Java 返回到 C++

c++ - double 或 float,哪个更快?