You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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,提问作者匿名

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:17:27