zoukankan      html  css  js  c++  java
  • strlen与sizeof

    strlen与sizeof

    strlen

      是一个函数,运行时才能计算。

    声明:

    size_t strlen(const char *string);
    

    说明:
      (1) 操作对象只能是char*,当然相应的数组char[]也行;
      (2) strlen返回的是字符串大小,从开始到第一个''为止,不包含''。
    例:

    char *str0 = "Hello!";
    cout << strlen(str0)<<endl;                             //输出6
    cout << sizeof(str0)<<endl;                             //win32平台,输出4,具体看sizeof说明
    char str1[20] = {'H', 'e', 'l', 'l', 'o', '!' };
    cout << strlen(str1)<<endl;                             //输出6
    cout << sizeof(str0)<<endl;                             //输出20,数组分【配空间大小
    char str2[20] = {0, 'H', 'e', 'l', 'l', 'o', '!' };
    cout << strlen(str2)<<endl;                             //输出0, 因为第一个字符就终止了
    

      

    sizeof

      判断一个对象或者类型所占的内存字节数的操作符,在编译时就已经计算好了。

    说明:
      (1) 操作对象为基本类型,则值为基本类型占用空间大小;
      (2) 操作对象为对象,则值为对象占用空间大小;
      (3) 操作对象为数组,则值为数组分配的空间大小;
      (4) 操作对象为指针,则值为指针本身大小;
        如程序为win32位平台,则指针均为4个字节,如程序为x64平台,则指针均为8个字节。
      (5) 操作对象为结构体,则要求满足字节对齐原则。
      
    补充 —— 字节对齐原则
      主要包括三个准则:
        (1) 每个成员起始位置相对于结构体起始位置偏移量必须为该成员大小的整数倍;
        (2) 对于结构体中的结构体成员(如结构体A为结构体B的成员),则成员结构体A其相对于起始位置偏移量必须为机构体A中最宽成员整数倍(可联系(3)进行理解);
        (3) 结构体总大小必须为结构体中最宽成员的整数倍。
        总结:补不补,看后面;总长度看最宽。
        
    例:

    struct A
    {
    	int a;                  //4
    	short b;                //2, 后面补2(因为下一个是int类型,起始位置必须是4的整数倍,而4+2不是4的整数倍)
    	int c;                  //4
    	char d;                 //1,补3(整个结构体长度为最宽元素int的整数倍)
    };
    
    struct B
    {
    	int a;                  //4
    	short b;                //2
    	char c;                 //1,补1(下一个成员是int型,宽度为4,4+2+1不,4的整数倍)
    	int d;                  //4
    };
    

      故结构体A宽度为16个字节,而结构体B为12个字节。可以看出,由于字节对齐原则,在定义结构体时合理的成员顺序有助于减少内存消耗。

  • 相关阅读:
    Redis --- 客户端 --- Another Redis Desktop Manager
    Docker --- 记录安装与使用过程中遇到的问题
    Docker安装教程
    Python --- pip --- No module named 'pip'异常问题
    天气接口测试用例生成报告
    jsonpath使用
    python小知识,字典
    python小知识,列表推导式
    python小知识,sort和serted的区别
    如何查看app启动的activity
  • 原文地址:https://www.cnblogs.com/silentteen/p/7991900.html
Copyright © 2011-2022 走看看