sizeof

  • 定义

    • 计算对象类型所占用的字节数(byte)

      • 记住是字节数,而不是个数
  • 语法
    • sizeof(对象)

      • int i; sizeof(i);
    • sizeof(类型)
      • sizeof(int);
    • sizeof 对象
      • int i; sizeof i;
    • sizeof(2);sizeof(2+3.14);
      • sizeof()可以对一个表达式求值,但是它是根据表达式的类型进行求值。
      • 相当于sizeof(int);sizeof(double);
    • sizeof(function())
      • sizeof()可以对一个函数调用求值,其结果是函数返回类型的大小,记住函数是不会被调用的。
      • int function(); sizeof(function());//4
      • 返回值类型是没有确定的函数,不能调用sizeof;
      • void function(); sizeof(function());//error
      • void function(); sizeof(function); //error
  • sizeof的常量性
    • sizeof的计算发生在编译时刻
  • 基本数据类型的sizeof
    • 32位和64位机器的最大区别

      • 32位机器:指针代表寻址空间, 32位的寻址空间是2^32, 即32个bit,也就是4个字节
      • 64位机器,很显然就是8个字节
      • 所以sizeof(指针),32位得4bytes,64位得8bytes,但是其他的基本数据类型是一致的,如sizeof(int)都是4个字节。
  • 数组的sizeof
    • 静态分配的数组

    • 动态分配的数组
      • 很显然,动态分配的数组在编译时是无法知道数组的大小

        • n待输入;int* a=new int[n];sizeof(a); //4
        • 所以对于动态分配的数组sizeof将转换为对指针的sizeof
  • 指针--该指针指向字符数组
    • char *a = "12345"; sizeof(a); //4
    • 上述和char b[] = "12345"还是有区别的,sizeof(b) //6
  • 结构体的sizeof
    • sizeof求得的结构体(及其对象)的大小并不等于各个数据成员对象的大小之和!

      • 结构体的大小等于结构体内最大成员大小整数倍
      • 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍
      • 为了满足规则1和2编译器会在结构体成员之后进行字节填充

struct A{

int num1;

int num2;

double num3;

};

sizeof(A)//16

struct B{

int num1;

double num3;

int num2;

};

sizeof(B) //24
 
strlen
  • 定义

    • 返回字符串的长度。

      • 从字符串的第一个字符开始遍历,直到遇到结束符NULL。返回的长度不包括NULL。
    • 运行时计算长度,这个sizeof刚好相反
      • 静态字符数组

        • char a[] = "123";strlen(a);//3,遇到NULL停止,不包括NULL
        • char a[] = "";strlen(a);//0,不包括NULL
        • char a[20] = "123";strlen(a);//3
        • char* a= "123";strlen(a);//3
      • 动态字符数组
        • char *a = new char[20];strlen(a);//27
        • 上述并不知道NULL的结尾,所以得到的长度每次运行都不一样。

最新文章

  1. [bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
  2. 关于linux密码忘记问题解决方法
  3. Django模板格式
  4. BZOJ3476 : [Usaco2014 Mar]The Lazy Cow
  5. 使得<li>在一行显示,去除浮动的方法
  6. HTML 段落
  7. spring + mybatis 注解式事务不回滚的原因分析 @Transactional
  8. mvc wcf 并发提示,存储Application,验证是否有用户在操作
  9. JavaScript路线
  10. LeetCode算法题-To Lower Case(Java实现)
  11. spring boot + vue + element-ui全栈开发入门——spring boot后端开发
  12. 记一次给自己的本子更换一个SSD盘
  13. 哈夫曼树Huffman
  14. 为什么要使用 Docker(二)
  15. 数据库的增、删、改、查 (CURD)
  16. linux 2.6.32.220的一个crash记录
  17. 风险指针(Hazard Pointer) 内存空间共享模型
  18. WCF服务安全控制之netTcpBinding的用户名密码验证【转】
  19. 如何将mysql表结构导出成Excel格式的(并带备注)另附转为word表格的方法
  20. bjui的validate表单验证的使用

热门文章

  1. Html5 学习系列(五)Canvas绘图API快速入门(1)
  2. C++ 表达式
  3. Atitit.研发管理--提升效率--软件开发方法DSM总结o99
  4. paip.java 以及JavaScript (js) 的关系以及区别
  5. DL 小记之序
  6. 好消息!Html5游戏和动画的福音
  7. 用ColorMatrix將Bitmap轉成灰度图
  8. struts2从2.2.3升级到2.3.15.1步骤
  9. C++与C#的时间转换
  10. 使用 Aircrack-ng 破解 WEP 和 WPA/WPA2 加密的 Wi-Fi 密码。(转)