-
char a[] = {'a','b','c'}; -
char b[] = "abc"; -
char c[] = { 'a','b','c','\0'}; -
int d[] = {1,2,3 }; -
cout << a << endl; -
cout << b << endl; -
cout << c << endl; -
cout << d << endl;
结果:

分析:
1.以字符串字面量初始化的字符数组cout数组名可以输出整个数组;
2.列表初始化的字符数组必须加上字符串结束符‘\0’才能cout数组名才能正确输出整个数组
3.列表初始化的字符数组没加加‘\0’的话,可以看见字符数组打印出来了,但是后面多了几个字符,因为cout不知道什么时候结束
4.而其他类型的数组,比如int,cout数组名输出的是这个数组的16进制地址,后面会验证这一点。
为什么会出现这种情况呢?不是说数组名代表数组的首地址吗?
因为cout对于cha[]重载了<<运算符呗。
另外强调一点,数组b和c的长度都是4字节。
那么我们怎么输出char数组的首地址呢,用printf:
-
printf("%p \n", c); -
printf("%p \n",d);
也可以这样:
printf("%p \n", &d[0]);
%p表示以16进制的形式输出。

数组d的地址怎么跟上面不一样,因为这是运行两次的截图。。
--------------------------------------------------
以后遍历数组可以多使用范围for循环,自动检测,节省时间,比如输出上面定义的数组d:
-
for (auto v: d) { -
cout << v << " "; -
} -
cout << endl;
注:这是C++11新特性,vs2010不支持的,我用的vs2015.
博客主要分析了C++中字符数组的输出情况,指出以字符串字面量初始化的字符数组可直接用cout输出,列表初始化的需加结束符‘\\0’,否则会多输出字符;其他类型数组cout输出首地址。还介绍了输出char数组首地址的方法,以及可使用C++11的范围for循环遍历数组。
584

被折叠的 条评论
为什么被折叠?



