C++ cout字符数组和普通数组

int ab[10] = {1,2,3,6,7};
char a[6] = {'h','a','p','p','y','\0'};
char ac[] = "happy";
cout<<ac<<endl;
cout<<ac<<endl;
cout<<ab<<endl;
字符数组是可以用这种方式输出的,因为数组名即代表首地址,数组是一块连续的内存空间,所以能直接输出.如果是其他类型的数组则输出的是一个地址.根本区别在于没有终止符,因此其他数组要是直接能cout就无法停止下来。

为啥输出结果是字符串就是一块连续的内存空间,整型数组就不是?那整型数组在内存上的顺序都是断续的吗?
那数组char a[5]={'h','a','p','p','y'}呢?为什么直接输出cout<<a以后,后面还有两个乱码字符出现?这怎么解释。
解答:
1、char型数组中每一个元素都是1个字节所以字符串之间的地址是加1的,但是int数组每个元素占4个字节所以数组中每个元素地址的间隔是4,其实它也是连续的,出现乱码是因为系统没有找到结束符,你可以把数组设大一点,然后最后一个字节添0如:char a[6]={'h','a','p','p','y',0};就可以了。
2、因为C和C++不进行数组的边界检查,数组在内存中存放的只是所有数组元素的值,而不存在一个地方可以表示数组的大小.所以cout函数没法知道该输出多少个元素。而字符串则不同,它有一个'\0'用来表示字符串结束,cout看到'\0'就知道输出结束了。可能你想问,为什么别的类型不也弄个类似于'\0'的结束符呢.那我就反问你,你认为哪个值用来做结束符合适?字符串可以用'\0'来表示结束,是因为'\0'这个值就是专门用来表示字符串结束的,对于其他类型,比如整数,你能说用0或-1来专门表示数据结束么。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值