输出数组名和输出数组首地址(C++)

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/C++)