为何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
相关产品推荐
相关产品推荐

