C基础题-sizeof
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的更多相关文章
- 【C++基础】sizeof 数组 指针 空NULL
笔试遇到很多sizeof的小题,博主基础堪忧,怒总结如下,还是要巩固基础啊啊啊! sizeof操作符 对象所占 栈内存空间的大小,单位是字节 关键词:char 数组 指针 结构体 class [注意 ...
- nyist oj 79 拦截导弹 (动态规划基础题)
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...
- C/C++笔试题(基础题)
为了便于温故而知新,特于此整理 C/C++ 方面相关面试题.分享,共勉. (备注:各题的重要程度与先后顺序无关.不断更新中......欢迎补充) (1)分析下面程序的输出(* 与 -- 运算符优先级问 ...
- 2-sat基础题 uvalive 3211
蓝书325页的基础题 二分+2-sat //看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using n ...
- hdu 2089 不要62 (数位dp基础题)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- poj 2955 Brackets (区间dp基础题)
We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...
- 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 ...
- Android测试基础题(三)
今天接着给大家带来的是Android测试基础题(三). 需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...
- 小试牛刀3之JavaScript基础题
JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...
随机推荐
- iOS UITableView滚动头图 拉伸放大效果 (头部弹性效果) 增加iOS11支持 附有demo
今天修改日期为2017年11月25日 两个月前做了iOS11的bug修复,才对博客进行更新,见谅. 在iOS11上需要注意两个问题 1.使用UIScrollview,UITableView,UIWeb ...
- Android Theme主题
•android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 •android:theme="@and ...
- 基于Web的实验室管理系统技术简要报告
基于Web的实验室管理系统技术简要报告 Copyright 朱向洋 Sunsea ALL Right Reserved 一.网站架构 该网站使用C#语言,利用SQL Server2008数据库,采用V ...
- 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 ...
- Idea 添加完项目以后自动生成的web.xml报错 'org.springframework.web.servlet.DispatcherServlet' is not assignable to 'javax.servlet.Servlet
解决方法:Project Structure - Modules - 你的项目 - Dependencies 添加Tomcat library
- EntityFramework 学习 一 枚举
1. Convert an existing property to Enum: using (var ctx = new SchoolDBEntities()) { Teacher tchr = n ...
- EntityFramework 学习 一 DbContext
上一节中EDM自动生成SchoolEntities类,该类继承DbContext EntityFramework4.1之前的版本,EDM生成的类继承ObjectContext,使用ObjectCont ...
- Hadoop-HA配置详细步骤
1. HA服务器配置 对hdfs做高可用 1.1服务器详情 服务器:centos7 Hadoop:2.6.5 Jdk:1.8 共四台服务器 192.168.1.111 node1 192.168.1. ...
- neutron VPC
The goal of this document is to provide an umbrella blueprint defining how to add support for VPC in ...
- CDN存储和加速静态文件是什么回事(整理)(CDN是什么)
CDN存储和加速静态文件是什么回事(整理)(CDN是什么) 一.总结 一句话总结: 内容分发网络:Content Delivery Network:依靠网络中的各个节点,就近发放静态资源. CDN的全 ...