sizeof  C语言中判断数据类型或者表达式长度符;关键字;字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来!

一、关于sizeof简单的总结
  1、sizeof的使用形式:sizeof(var_name)或者sizeof var_name
  2、变量名可以不用括号括住:sizeof a
  3、数据类型必须用括号括起来:sizeof(int)
  4、sizeof可以对表达式求值:sizeof(2+3.14),实际是sizeof(double)
  5、sizeof可以对函数调用求值,实际上是对返回值类型求值
  6、以下情况不能用sizeof进行求值
      1)不能对函数名求值
      2)不能对不确定返回值的类型求值,如void
     3)位域成员不可以使用sizeof求值
  7、sizeof的结果是size_t,它被定义为unsigned int类型。该类型保证容纳显示所建立的最大对象的字节大小。
     C++标准规定,int占一个机器字长。
    32位机器:
    短整形      short int = 16 位 = 2 字节
    整形          int = 32 位 = 4 字节
    长整形            long int = 32 位 = 4 字节
    单精度     float = 32 位 = 4 字节
    双精度       double = 64 位 = 8 字节
    长整形双精度  long double = 64 位 = 8 字节
    字符型            char = 8 位 = 1 字节
    无符号字符型       unsigned char = 8 位 = 1 字节
    有符号字符型      signed char = 8 位 = 1 字节
    无符号整形    unsigned int = 32 位 = 4 字节
    有符号整形    signed int = 32 位 = 4 字节
    无符号长整形      signed long int = 32 位 = 4 字节

    指针p      sizeof(p) 32位=4字节
  8、sizeof与strlen()比较,在计算字符数组时,sizeof包含'\0',strlen()不包含'\0'
  9、32位系统下指针的sizeof是4字节,64位下是8字节
  10、对引用的sizeof,其实是对其所绑定的对象的sizeof
  11、对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节),且字符串尾有空字符。
  12、对数组sizeof可以计算数组的大小
  13、数组作为形参时,数组名的sizeof是4个字节
  14、32bit系统中,int **a[3][4];sizeof(a)=48

注:

int型字长问题:
① C/C++规定int字长和机器字长相同;
② 操作系统字长和机器字长未必一致;
③ 编译器根据操作系统字长来定义int字长;
由上面三点可知,在一些没有操作系统的嵌入式计算机系统上,int的长度与处理器字长一致;有操作系统时,操作系统的字长与处理器的字长不一定一致,此时编译器根据操作系统的字长来定义int字长:"在64位机器上运行win32系统,那么所有for win32的C/C++编译器中int都是32位的"。

二、关于struct的空间计算

  struct的空间计算比较复杂,总体遵循两个规则:
   1)在windows32环境下,整体空间是占用空间最大的成员(的类型)所占字节的整数倍,在Linux+gcc环境下,若最大成员类型所占字节数超过4,如double是8,则整体空间是4的整数倍即可。
  2)在windows32环境下,数据对其原则——内存结构体成员的先后顺序排列,当排到该成员变量时,其前面已经摆放的空间大小必须是该成员类型大小的整数倍,如果不够则补齐,以此类推。但在Linux+gcc环境下,若成员类型超过4,如double是8,则前面已经摆放的空间大小是4的整数倍即可,不够则补全。
  win32环境下:在摆放时,思路是:
    1、首先把第一个成员放在地址为0的地方
    2、然后再根据第二个成员的类型大小寻找其摆放的起始位置,摆放起始位置必须是类型大小的整数倍,依次类推。
    3、最后,再计算整体空间是不是最大类型大小的整数倍。
  而在Linux+gcc环境下:摆放的思路是
    1、首先把第一个成员放在地址为0的地方
    2、如果一个单元装不下,则另放在一个单元地址的起始位置。
    3、最后,如果最大类型带下超过4,再计算整体空间是不是4的整数倍。

四、关于union的空间计算
  联合体的sizeof值是所有成员sizeof的最大值。

五、关于枚举的空间计算
  enum只是定义了一个常量集合,里面没有“元素”,而枚举是当做int类型存储的,故枚举类型的sizeof值为4。

C基础题-sizeof的更多相关文章

  1. 【C++基础】sizeof 数组 指针 空NULL

    笔试遇到很多sizeof的小题,博主基础堪忧,怒总结如下,还是要巩固基础啊啊啊! sizeof操作符 对象所占 栈内存空间的大小,单位是字节 关键词:char  数组 指针 结构体 class [注意 ...

  2. nyist oj 79 拦截导弹 (动态规划基础题)

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...

  3. C/C++笔试题(基础题)

    为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...

  4. 2-sat基础题 uvalive 3211

    蓝书325页的基础题 二分+2-sat //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using n ...

  5. hdu 2089 不要62 (数位dp基础题)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. poj 2955 Brackets (区间dp基础题)

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  7. Jam's balance HDU - 5616 (01背包基础题)

    Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...

  8. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  9. 小试牛刀3之JavaScript基础题

    JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...

随机推荐

  1. php验证复选框的小例子

    发布:thatboy   来源:Net     [大 中 小] 本文介绍一个简单的php实例,通过代码验证复选框值的有效性,有需要的朋友,可以参考下. 验证复选框的php代码,如下: <?php ...

  2. python中的id

    python对象都有三个特性分别是身份.类型.值,身份指该对象内存地址,内建函数id()可获得身份,类似于指针的地址,但不能控制这个值,类型决定对象可以保存什么类型的值,值是对象表示的数据项,pyth ...

  3. 【九】MongoDB管理之安全性

    要保证一个安全的MongoDB运行环境,DBA需要实施一些控制保证用户或应用程序仅仅访问它们需要的数据.这些措施包括但不限于: 认证机制 基于角色的访问控制 加密 审计 一.认证机制 认证是验证客户端 ...

  4. 剑指offer——扑克牌的顺子

    思想: 1.先将输入的几个数进行排序,sort函数是#include<algorithm>下的. 2.统计0的个数,以及相邻数的差值,比较0的个数及差值的和.看是否可以用大王填充中间的差值 ...

  5. 学习docker可能会用到的参考

    局域网部署Docker--从无到有创建自己的Docker私有仓库 http://lib.csdn.net/base/docker 正在刷(学习)一遍官方文档,上面是一些其他可能用到的资料,是在解决自己 ...

  6. QT 按键处理 快捷键处理 shift + ctrl

    原味地址:http://www.cnblogs.com/codingmylife/archive/2010/08/30/1812739.html CTRL+Enter发送信息的实现 在现在的即时聊天程 ...

  7. Sqlte 知识点记录

    1.表存在 select count(*) from sqlite_master where type='table' and name='MyTable'; sql),path ))"; ...

  8. beans.factory.BeanCreationException beans.factory.annotation.Autowired(required=true)

    主要是这三个方面排查: 1,注入写成这样 @Autowired   private BrandServiceImpl      brandServiceImpl; 2,jar冲突,在pom.xml中 ...

  9. Opencv - Android 配置安装

    1.道具们: windows 7 64位 OpenCV-2.4.6-android-sdk-r2 ( http://sourceforge.net/projects/opencvlibrary/fil ...

  10. codeforces 655B B. Mischievous Mess Makers(贪心)

    题目链接: B. Mischievous Mess Makers time limit per test 1 second memory limit per test 256 megabytes in ...