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. ComponentOne Xuni助力Xamarin开发者突破百万,快速开发Android、IOS Apps

    在微软Build 2015上,随着VS 2015的预览版发布,Xamrine免费版已经作为VS 2015跨平台移动解决方案的核心.与此同时,Xamarin官方也宣布其用户量达到百万之多.2011年7月 ...

  2. ueditor编辑器和at.js集成

    源码: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&qu ...

  3. paip.环境设置 mybatis ibatis cfg 环境设置

    paip.环境设置 mybatis ibatis cfg 环境设置 三部分 //////////1. 电泳.... ............2. 猪配置文件  com/mijie/homi/searc ...

  4. 搭建wamp环境,数据库基础知识

    服务器管理软件php Apache.net IISjava Tomcat 服务器管理软件起到的作用:管理服务器工作,具体的工作如下:1.静态页面用户将请求发送到服务器,服务器中的服务器管理软件将请求发 ...

  5. 使用socket.io开发简单群聊功能

    1.新建package.json文件: { "name": "socket-chat-example", "version": " ...

  6. cocos2d-x在Android平台下的音频导致的卡死

      先挖个坑,慢慢再来填.出错信息: frameworks/wilhelm/src/android/AudioPlayer_to_android.cpp:779: pthread 0x75f14a00 ...

  7. LDAP查询过滤语法(MS)

    http://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters ...

  8. CCNA实验1.port-security

    一, 二,MAC地址绑定 3550-1#conf t3550-1(config)#int f0/13550-1(config-if)#switchport mode access /指定端口模式.35 ...

  9. [Java] 解决spring的xml标签内不能自由增加说明的难题,方便调试、部署时进行批量屏蔽

    作者:zyl910 以往我们想在spring的xml配置文件中增加说明文本时,只能使用xml注释(<!-- 注释 -->).这对于"调试.部署时想批量屏蔽部分bean" ...

  10. Django 源码小剖: URL 调度器(URL dispatcher)

    在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的 ...