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. [游戏模版19] Win32 物理引擎 匀速运动

    >_<:Learning the physical engine >_<:resource >_<:code #include <windows.h> ...

  2. Nginx - Windows下Nginx初入门

    公司刚使用nginx,预先学习下.鉴于机器没有Linux环境,在Windows熟悉下. 下载 目前(2015-07-11),nginx的稳定版本是1.8.0,在官网下载先,windows版的nginx ...

  3. ubuntu安装ftp服务器

    ubuntu安装ftp服务器 1: 安装vsftpd ~$ sudo apt-get install vsftpd ubuntu10.10自己装了,这步省略. 2: 配置vsftpd 2.1 修改vs ...

  4. paip.提升性能---list,arraylist,vector,linkedlist,map的选用..

    paip.提升性能---list,arraylist,vector,linkedlist,map的选用.. arraylist,vector基本一样,但是,vector线程安全的. 作者Attilax ...

  5. JNI技术基础(1)——从零开始编写JNI代码

    众所周知,Java程序的最大特点就是其跨平台的特性,编写的上层应用程序可以不加任何修改甚至不用重新编译而运行于不同的平台上,然而,Java本身也存着这一个弊端,那就是性能上相对要差一些,在对性能要求比 ...

  6. 首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。(已完善)

    package java1; public class Account { String zhanghao; double yue=0; double add; double get; Account ...

  7. 一个jsonp的简单实例

    <script type="text/javascript"> //添加<script>标签的方法 function addScriptTag(src){ ...

  8. iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

    iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...

  9. C/C++在Java项目、Android和Objective-C三大平台下实现混合编程

    Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C ...

  10. 前沿技术解密——VirtualDOM

    作为React的核心技术之一Virtual DOM,一直披着神秘的面纱. 实际上,Virtual DOM包含: Javascript DOM模型树(VTree),类似文档节点树(DOM) DOM模型树 ...