C++数组的声明

个数定义必须是常量

再一看眼数组定义的语法:

数据类型 数组变量名[个数常量];

 

注意“常量”两字,这说明,个数必须是一个可以事先决定的值,并且该值不能被改变。

比如用立即数:

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;




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值