个数定义必须是常量
再一看眼数组定义的语法:
数据类型 数组变量名[个数常量];
注意“常量”两字,这说明,个数必须是一个可以事先决定的值,并且该值不能被改变。
比如用立即数:
int arr[5000];
或者用宏:
#define MAX_CJ_COUNT 5000
int arr[MAX_CJ_COUNT];
或者用常量:
const int max_cj_count = 5000;
int arr[max_cj_count];
就是不能用变量:
int max_cj_count = 5000;
int arr[max_cj_count]; // error! 不能用变量指定数组的大小。
字符数组初始化
首先是初始化部分,字符数组允许这样实现:
char name[] = "Mike";
对于中国人来说,这是一个“救命”的做法,我们不用去“拆”汉字了——还记得吗?一个汉字占两个字节,即一个汉字其实是由两个字符组成的。
char myname[] = "南郁";
当然,明确指定元素个数也不违法:
char name[5] = "Mike";
为什么我指定 name 的元素个数为5? 这是一件更重要的问题。后面会说到。
char name1[] = {'M','i','k','e'};
char name2[] = "Mike";
cout << sizeof(name1) << endl;
cout << sizeof(name2) << endl;
结果:
4
5
name2 多了一个元素,并且值正是 : '\ 0 ' 。它就是编译器自动加入字符串结束标起:空字符。正如我们所想,第一种初始化方法,会让 name2的尺寸多出一个字节,那个字节用于存入空字符。
由于引出一个重要的注意事项:指定字符数组的大小时,请注意为空字符预留一个字节。
char name[5] = "Mike";
最不会犯错的不写:
char name[] = "Mike";
反过来,当采用 {'M','i','k','e'} 的形式初始化时,我们可以手工添加一个空字符:
char name [] = {'M','i','k','e','\0'};
cout << name;
由于有了'\0'作为结束,所以cout可以正确地输出name。
请回答,下面的代码运行后输出应为?
char name [] = {'M','i','k','\0','e'};
cout << name;