-
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.