加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

为啥c/c++中的字符数组有结束符,而整型数组没有呢?

(2016-09-29 16:30:36)
标签:

计算机编程

c/c

it

分类: 软件开发
先体会一下'\0'的用处:
      先来个简单的c++代码
      #include
     void main()
    {
char str[]={"zyh"};
cout<<str<<endl;
     }
这段代码的作用就是把"zyh"这个字符串输出来,正常情况下运行的话,代码是不会错的。
我们在char str[]这一行下个断点来跟踪一下内存和数组内部的值,下图可以清楚的看到,数组在内存中被分配了4个字节,前3个是我们的"zyh",第4个就是'\0'

接下来我们来做点有意思的事情,我把第4个字符'\0'改成122对应字符'z'

这是修改之后的内存中的对应内容,第四个为7A,对应字符'z'
http://s7/mw690/005NemkAzy75ecHHCke56&690
这是没修改之前的内存中的对应内容,第四个为00,对应为'\0'
http://s15/mw690/005NemkAzy75ecITbL81e&690

接下来就是见证奇迹的时候了,看见没有,多输出两个字符,因为我们把它原来的'\0'修改了。执行cout<<str<<endl;的时候,在地址0x0018ff44处,挨个从第一个字符开始输出到屏幕上,直到遇到'\0'才能停止输出,因为虽然我们把它原来位置上的'\0'修改了,但是后面内存中还存在'\0',所以就可以停止。笔者真不知道如果后面内存中一直不存在'\0',这个程序会有多蛋疼。
现在看到了'\0'对于char字符数组有啥用了吧,笔者目前主要发现了cout<<str<<endl;这种形式的使用会体会出'\0'终结符的作用,其他的好像也没啥用。为啥int型数组没有终结符呢?你猜?
比如int a[]={1,2,3,4}这个简单的int数组,你能直接cout<<a<<endl;吗?其实是可以的,不过只是输出这个数组在内存中的位置而已,不像字符数组一样把字符当做字符串输出来,难道你想要输出"1234"这个可能被称为数字串的东西吗?笔者懂的少,这个还真的没有见过,以后要靠你发明了。
      总之,整型数组用的时候一般会指定数组里边元素的数目,就算没有指定,系统会在编译的时候给你指定好,int型数组使用的时候一般都会和for循环配合使用,以此来控制取数组的次数,不过有种情况下可能会有些意想不到的事情发生,你的int型数组最大下标才是4,你来个a[5],a[6]啥的,会溢出,溢出会把这个数组所在内存后边的东东输出来,溢出就溢出吧,反正跟终结符这个话题没啥关系。
    再啰嗦一下,字符数组有终结符主要是因为有cout<<str<<endl;这种情况发生,需要终结符来控制,int型数组没有这种情况,所以不需要控制。



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有