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

为何cout输出char数组变量str时打印DATA而非首地址?

关于C++中char数组与cout输出的疑问解答

先看你写的代码:

#include<bits/stdc++.h>

using namespace std;

int main()
{
    char str[7]="DATA";
    cout << str[2]<<" "<<str;
    return 0;
}

核心疑问解答

  • str作为数组名,确实会隐式转换为指向数组首元素的char*指针,但cout对char*类型有特殊处理逻辑:它会从指针指向的内存位置开始,逐个输出字符,直到遇到字符串终止符'\0'才停止。
  • 你声明char str[7] = "DATA";时,C++会自动在字符串末尾添加'\0'作为结束标记,所以数组里实际存储的是'D'、'A'、'T'、'A'、'\0',剩下的3个位置会被初始化为0。cout输出str时,就从首字符'D'开始打印,直到碰到'\0',所以会输出完整的DATA。
  • 如果想输出str对应的内存地址,你需要把它强制转换为void*类型,比如写cout << (void*)str;,这样cout就会打印地址而不是字符串了。
  • 至于str[2],因为数组下标从0开始,所以取的是第三个元素'T',这就是输出开头的T的原因。

内容的提问来源于stack exchange,提问作者Zoya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:20:47