zoukankan      html  css  js  c++  java
  • sizeof和strlen区别

    1)strlen()是函数,用于计算字符串数组的实际长度(到‘’结束,不包含‘');strlen只能用于计算char *a或char a[]格式的,不能用于计算string类型

     1 #include<iostream>
     2 using namespace std;
     3 void main()
     4 {
     5 char a[10];   //未初始化,长度不确定
     6 char b[10]={};  //初始化为’空,NULL;长度为0,
     7 char c[10]="abc";  //遇到’‘结束,实际长度为3
     8 char d[10]="abcdef";   //遇到’‘结束,实际长度为3
     9 char *e="abc";  //遇到’‘结束,实际长度为3
    10 cout<<strlen(a)<<" "<<strlen(b)<<" "<<strlen(c)<<" "<<strlen(d)<<" "<<strlen(e);
    11 }

    输出结果:

    注:string 类型数据

    string str="abc";
    strlen(str);   //error,strlen不能用于string类型
    str.size(); /*ok,string自带函数,计算实际包含的字符长度,长度为3.注意,size()不是根据结尾有无‘'来实现的,可以定义一个string类型的迭代器it,以it==str.end()为截至条件进行计算*/

    2)sizeof是操作符,计算的是所占内存的实际长度,单位是字节,可用于常量,变量,数据类型,函数,sizeof是基于数据类型来计算长度的

    • 常量:

          a.对于数字类型的常量,sizeof计算的是该数字所属数据类型的长度,如:

    sizeof(2)  //2是int类型,长度为4
    sizeof(2.1)  //2.1是double类型,长度为8

    b.对于字符串类型的常量,sizeof计算的是所有字符的长度,包括‘’,如

    sizeof("abc")        //包含4个char类型的字符,包括末尾隐含的'',char类型长度为1,总长度为4
    sizeof("abcdef")  //长度为8,包含8个char类型的字符,将‘'作为普通字符,char类型长度为1,总长度为8
    • 变量:
     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 void main()
     5 {
     6 char a[10];      //char类型长度为1,包含10个char类型的数组长度为10
     7 char b[10]={};
     8 char c[10]="abc";
     9 char d[10]="abcdef";
    10 char *e="abcde";
    11 int f[10];    //int类型长度为4,包含10个int类型的数组长度为40
    12 cout<<"a:"<<sizeof(a)<<"
    b:"<<sizeof(b)<<"
    c:"<<sizeof(c)<<"
    d:"<<sizeof(d)
    13     <<"
    e:"<<sizeof(e)<<"
    *e:"<<sizeof(*e)<<"
    f:"<<sizeof(f)<<endl;
    14 }

    输出结果:

    注:

    1. 对于 char *e="abcde",sizeof(e)计算的是指针e所占内存长度,而不是e指向的字符串长度;sizeof(*e)计算的是字符串中第一个字符的长度,char类型长度为1,数组做形参,此时数组名代表的是指针,如void fun(int a[3]){cout<<sizeof(a);//a是指针,值为4}
    2. 对于string类型的变量,sizeof计算的是string对象所占的空间,而不是string所存储的字符串的大小,sizeof(string)大小与库有关,string在不同的库中实现可能不同
    • 数据类型:
    sizeof(int) //4
    sizeof(double) //8
    • 函数:

    计算的是函数返回值类型的长度,如:

    int fun(){...}
    sizeof(fun())  //计算int类型的长度,为4
    sizeof不能计算返回值类型是void的函数

    总结:由以上分析可以看出,strlen计算的是字符串中''结尾之前的字符长度,而sizeof是以数据类型为基础,大小为(数据类型长度*元素个数),元素个数为声明的个数,与有无初始化无关。

    char a[]={'a','b','c'};
    strlen(a);  //因为a[]结尾没有‘',所以长度不确定
    sizeof(a); //值为3

    关于结构体,公用体和枚举类型的sizeof将在下一篇博客中介绍

  • 相关阅读:
    C#将JSON字符串对象序列化与反序列化
    Chrome 中的 JavaScript 断点设置和调试技巧
    JS 关闭 页面 浏览器 事件
    使用Jquery向一个空白网页动态创建一个iframe,及嵌入页面,和向嵌入页面传参
    js/jquery判断浏览器的方法小结
    Javascript中document.execCommand()的用法
    js 点击默认另存 ,不是打开 Blob 操作
    浅析jQuery删除节点的三个方法
    IE 和Firefox的js兼容性总结
    removeNode is not defined removeNode is not a function
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5438406.html
Copyright © 2011-2022 走看看