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. iOS UITableView滚动头图 拉伸放大效果 (头部弹性效果) 增加iOS11支持 附有demo

    今天修改日期为2017年11月25日 两个月前做了iOS11的bug修复,才对博客进行更新,见谅. 在iOS11上需要注意两个问题 1.使用UIScrollview,UITableView,UIWeb ...

  2. Android Theme主题

    •android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 •android:theme="@and ...

  3. 基于Web的实验室管理系统技术简要报告

    基于Web的实验室管理系统技术简要报告 Copyright 朱向洋 Sunsea ALL Right Reserved 一.网站架构 该网站使用C#语言,利用SQL Server2008数据库,采用V ...

  4. Data Structure Array: Find the two numbers with odd occurrences in an unsorted array

    http://www.geeksforgeeks.org/find-the-two-numbers-with-odd-occurences-in-an-unsorted-array/ #include ...

  5. Idea 添加完项目以后自动生成的web.xml报错 'org.springframework.web.servlet.DispatcherServlet' is not assignable to 'javax.servlet.Servlet

    解决方法:Project Structure - Modules - 你的项目  - Dependencies 添加Tomcat library

  6. EntityFramework 学习 一 枚举

    1. Convert an existing property to Enum: using (var ctx = new SchoolDBEntities()) { Teacher tchr = n ...

  7. EntityFramework 学习 一 DbContext

    上一节中EDM自动生成SchoolEntities类,该类继承DbContext EntityFramework4.1之前的版本,EDM生成的类继承ObjectContext,使用ObjectCont ...

  8. Hadoop-HA配置详细步骤

    1. HA服务器配置 对hdfs做高可用 1.1服务器详情 服务器:centos7 Hadoop:2.6.5 Jdk:1.8 共四台服务器 192.168.1.111 node1 192.168.1. ...

  9. neutron VPC

    The goal of this document is to provide an umbrella blueprint defining how to add support for VPC in ...

  10. CDN存储和加速静态文件是什么回事(整理)(CDN是什么)

    CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...