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的结尾,所以得到的长度每次运行都不一样。

sizeof and strlen整理的更多相关文章

  1. sizeof、strlen、字符串、数组,整到一块,你还清楚吗?

    写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...

  2. sizeof和strlen的区别

    一.sizeof    sizeof(...)是运算符,而不是一个函数.    sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...

  3. Sizeof与Strlen的区别与联系

    转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof    sizeof(...)是运算符,在头文件中typedef为uns ...

  4. Sizeof与Strlen的区别与联系(转)

    Sizeof与Strlen的区别与联系 一.sizeof     sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型 ...

  5. sizeof()和strlen()

    sizeof计算的是栈中大小 P { margin-bottom: 0.21cm; direction: ltr; color: rgb(0, 0, 0); text-align: justify } ...

  6. sizeof 和 strlen 的区别

    sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof    不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...

  7. C++-sizeof和strlen的区别

    一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.    它的功能是:获得保 ...

  8. sizeof 和 strlen 区别

    Sizeof与Strlen的区别与联系 一.sizeof    sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型. ...

  9. sizeof()与strlen()的区别

    首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点: 1.sizeof是一个关键字,而strlen确实一个函数. 2.sizeof求的是字节长度,而 ...

随机推荐

  1. SignalR + MVC5 简单示例

    本文和前一篇文章很类似,只不过是把 SignalR 应用在了 MVC 中 新建项目,选择 MVC 模板 安装 SignalR Install-Package Microsoft.AspNet.Sign ...

  2. crontab定时任务配置记录

    一.前言 今天简单记录下crontab的配置 二.crontab目录 /etc/crontab 文件 这是系统运行的调度任务 /var/spool/cron 目录 用户自定义的crontab任务放在此 ...

  3. 点击div外面该div消失(二)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. [译]JavaScript中,{}+{}等于多少?

    最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得 ...

  5. JS获取元素CSS值的各种方法分析

    先来看一个实例:如何获取一个没有设置大小的字体? <!DOCTYPE html> <html lang="en"> <head> <met ...

  6. paip.自定义java 泛型类与泛型方法的实现总结

    paip.自定义java 泛型类与泛型方法的实现总结 ============泛型方法     public static <atiType,retType> retType reduce ...

  7. 详解Bootstrap按钮组件

    按钮组也是一个独立的组件,所以可以找到相应的源码文件: Less:buttons.less Sass:_buttons.scss Css:Bootstrap.css    3131行~3291行 按钮 ...

  8. 《Xenogears》(异度装甲)隐含的原型与密码

    <Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...

  9. Oracle的 Pfile生成

    SQL> create pfile from spfile; File created. SQL> [oracle@localhost dbs]$ ls -lrttotal 24-rw-r ...

  10. 制作6寸 kindle pdf

    设置word 纸张大小为 90mm*117mm 然后保存为 pdf 就好了.