关于C++指针数组的疑问:cout为何输出字符串而非地址
关于指针数组与cout输出的问题解答
这个问题其实是C++标准库中cout的重载特性导致的,我来给你讲明白:
首先你没搞错,a[0]确实是一个指针,它存储的就是b[0]的内存地址。那为什么输出的是字符b而不是地址呢?
原因在于std::cout对char*类型有特殊的重载逻辑:当你向cout传入一个char*(或者const char*)时,它会默认把这个指针当成C风格字符串的起始地址,然后从该地址开始逐个输出字符,直到遇到'\0'(空终止符)才停下。
你的代码里只给b[0]赋值了'b',数组b的其他元素是未初始化的,内存里可能是随机值——不过刚好在你的环境中,b[0]后面的内存刚好存在一个'\0',所以cout只输出了b;如果没有的话,可能会输出一串乱码直到碰到空字符为止。
那如果想输出a[0]的实际地址怎么办?你需要把char*转换成一个不会被当成字符串的指针类型,比如void*。cout对void*的重载会直接输出指针的内存地址,比如修改代码:
cout << static_cast<void*>(a[0]) << endl; // 或者用C风格的强制转换也可以: // cout << (void*)a[0] << endl;
这样就能看到a[0]存储的真实地址了。
内容的提问来源于stack exchange,提问作者匿名
相关产品推荐
相关产品推荐

