1、字符数组的初始化
列表初始化
char c[] = { 'c','+','+'};//列表初始化,没有空字符
char c[] = { 'c','+','+','\0'};//列表初始化,包含空字符
字符串字面值初始化
char c[] = "c++";//字符串字面值初始化
字符串初始化和包含空字符的列表初始化是等价的
2、cout实验
int x[] = { 1,2,3 };
char c1[] = { 'c','+','+','\0'};
char c2[] = "c++";
char c3[] = { 'c','+','+',};
cout<<"x: " << x << endl;
cout<<"c1: " << c1 << endl;
cout<<"c2: " << c2 << endl;
cout<<"c3: " << c3 << endl;
输出结果
3、总结
数组在内存空间存储都是连续的,char类型特殊在他有一个空字符,通常以空字符结尾,cout可以通过char数组名连续输出字符直到遇到空字符。像int类型,我们根本找不到一个特殊的值去当作结尾,0?1?还是-1?这些都不可以。所以cout输出其他类型的数组名时得到的是数组首元素的地址。上面的字符数组c3 ,没有以空字符结尾,程序会一直输出,数组外的内存是未定义的,没有被初始化,输出结果就呈现出乱码,恰好遇到一个空字符然后停止输出。
这个知识点是在牛客上做题遇到的,请看下题
正确答案是B,你选对了吗