文章标题

来源:互联网 发布:淘宝客服兼职工资多少 编辑:程序博客网 时间:2024/06/05 15:07
                                    **c++中用char类型数组和指针表示字符串的长度和内存问题**    首先我们先来看看数组表示字符串的情况(字符串的最后一个字符是'\0',用来表示字符串的结束位置,当然这是默认加上的,并不需要我们手动去做):
    char c[]="Tian";    cout<<sizeof(c)<<endl;    //结果:5    cout<<strlen(c)<<endl;    //结果:4    char c2[]="En\0Tao";    cout<<c2<<endl;    //结果:En    cout<<sizeof(c2)<<endl;    //结果:7    cout<<strlen(c2)<<endl;    //结果:2
    简要分析:    1、从第一段代码结果来看:sizeof(c)获取数组c占的内存字节数时包括结束字符'\0',因此结果为5,即'T'、'i'、'a'、'n'、'\0'('\0'是一个字符,占一个字节的内存)这5个字符,共占内存5个字节(c++中每一个字符占一个字节,这一点我想大家都知道)。    用strlen(c)获取数组c的长度时则不包括结束字符'\0',因此结果为4,即'T'、'i'、'a'、'n'这4个字符,故结果为4。    2、从第二段代码来看,用cout输出字符串只能输出第一个字符'\0'前的字符,而且用strlen(c2)获取的数组c2的长度也是第一个'\0'字符前的字符总个数,用sizeof(c2)获取数组c2的内存字节数是7,说明sizeof()函数获取内存时并不受到'\0'的影响。    总之,sizeof(char类型数组名)函数获取的是一个数组所占的总内存,而strlen(char类型数组名)函数获取的则是第一个'\0'字符之前的字符的总个数(即长度)。    下面我们再来看看指针表示字符串的情况:
    char *str="Tian";    cout<<sizeof(str)<<endl;    //结果:4    cout<<strlen(str)<<endl;    //结果:4    cout<<*str<<endl;    //结果:T    cout<<sizeof(*str)<<endl;    //结果:1,说明*str指的是指针str指向的地址中的内容(仅是第一个字符),且所占内存的字节数为该指针类型(char)的字节数
    简要分析:    strlen(str)情况和上述的一样就不多解释了。    最后两行代码解释已经注释了,也就不多说了。    重点说一下第二行代码,刚开始你们看到时,可能会觉得sizeof(str)占用的字节数应该是5啊,为什么会是4呢,其实是这样的,sizeof(str)获取的并不是字符串"Tian"所占的内存字节数,而是char类型指针str所占的字节数(即指针所占的字节数),所以结果为4。提示:上述结果是在windows7,64位操作系统,VS2012条件下编译得到的。
0 0
原创粉丝点击