sizeof的用法的一些归纳
1 sizeof 是运算符,不是函数
2 sizeof 不能求得void类型的长度,能求得 void*类型的指针的长度
sizeof(void) 会导致编译错误。因为声明一个变量的最重要的作用就是告诉编译器该变量需要多少的存储空间,然而void是空类型,编译器无法确定void类型所需要的存储空间。
声明void* 在32位的机子上面是 4 字节的空间, 在64位的机子上面是 8 字节的空间。
3 sizeof 对结构体的大小的求解并不等于各个数据成员的大小的和
struct A{
int a;
int b;
double c;
};
struct B{
int a;
double b;
int c;
};
sizeof(A) //16
sizeof(B) //24
- 1 结构体的大小等于结构体内最大成员的大小的整数倍
- 2 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说
double型成员相对于结构体的首地址的地址偏移量应该是8的整数倍 - 3 为了满足上面两条的规则,编译器会在结构体成员之后进行字节填充
再来看sizeof(B),第一个成员a的首地址是0,他的类型是int,因此他的占用地址是0--3,第二个成员是double,他占用8个字节,由于之前a之占用了4个字节,为了满足规则2,是的b的起始地址偏移量是8,占用的地址空间是8--15,第三个数据成员是
int类型,占用4个字节,由于a和b共占用16个字节,而c占用16--19字节,那是不是结构体的大小就是20个字节呢,
错误,规则1的有沿途结构体内的最大数据成员是
double类型,因此还要在c的后面填充4个字节,是的结构体的大小是24个
4 sizeof 可以对函数调用求大小,记住求得大小是返回类型的大小,而且不执行函数体
int fun(int &a, int &b)
{
float c = 2.0;
double d = 0.5;
a = a+b;
return d;
}
int a =3;
int b =5;
cout << sizeof(fun(a,b))<<endl; //4
cout << a <<endl; //3
fun()的返回类型是int类型的,许多人认为返回是 double型的 ret, 但是进行了不安全的类型转换 double ---> int
a 的值,sizeof根本就不执行函数体
sizeof的用法的一些归纳的更多相关文章
- C#中sizeof的用法实例分析
这篇文章主要介绍了C#中sizeof的用法,包括了常见的用法及注释事项,需要的朋友可以参考下. sizeof是C#中非常重要的方法,本文就以实例形式分析C#中sizeof的用法.分享给大家供大家参 ...
- c++之sizeof的用法
在此温习一下c语言中sizeof的用法以及c++11.0的标准中,关于初始化的新方式,先上代码: # include "iostream" # include "stri ...
- C语言中sizeof()的用法
语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...
- sizeof的用法
因为对sizeof不是很了解,所以去查了博客啥的,发现还是有大学问的,以下对其用法进行总结. 参考:https://www.cnblogs.com/zhangyz/articles/4736758.h ...
- C语言中sizeof的用法
今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在 ...
- sizeof的用法 2007-12-19 11:06
sizeof的作用是什么?sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数.其返回值类型为size_t,在头文件stddef.h中定义 ...
- 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)
一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...
- c++中sizeof的用法
/*测试sizeof() 测试环境:windows 7 64位操作系统 VS2012编译器 */ #include <iostream> using namespace std; int ...
- sizeof新用法(c++11)
1.概念 1)sizeof是关键字,也是运算符,用来求对象占用空间的大小,返回字节数 2)c++11允许使用作用域运算符(::)来获取类中成员的大小,以前只允许先创建一个类的对象,通过类对象访问成员得 ...
随机推荐
- JavaWeb中登陆功能
首先我们要JavaWeb登陆的基本流程:JSP页面发送请求-->Servlet-->Servlet通过调用方法从数据库中得到数据并将结果返回页面 我们先建立三个jsp页面,包括login. ...
- python(7)– 类的反射
python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...
- 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter
属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter 一.普通的get 和set 属性. 一般的get 和set 属 ...
- 搭建yum源服务器
在生产环境中,受到网络环境的影响,服务器可能带宽有限,连外网速度较慢或者局域网内的某些机器由于安全的限制,本身就不允许和外网和任何的连接.而这时候现在通过yum安装包或update包时就是一件比较麻烦 ...
- JavaScript的正则表达式使用
一:遇到问题 今天做项目时,在前台js对身份证号进行验证时,一直达不到预期的效果,我是监控文本域变量, $scope.watch('form.idNo',function(v){ if(!v){ re ...
- Nginx HTTP User_agent
假设我这里有大量图像.CSS.javascript等静态文件,分别放在后端服务器 192.168.1.5 和 192.168.1.6上,那么我如何利用nginx的反向代理功能将不同的 http_us ...
- Tomcat - JNDI 配置
1. Create Your JavaBean Class Create the JavaBean class which will be instantiated each time that th ...
- Global.asax中的操作数据库代码无法执行
本人最近在做一个基于Access数据库的Web应用程序,为了实现一个定时更新数据库的需求,我在Global.asax中的Application_Start函数里写了个计时器, void Applica ...
- oracle中比较两表表结构差异和数据差异的方法
在工作中需要完成这么一个需求:比较两个表的表结构是否形相同,并找出差异.比较两个表中的数据是否相同,并找出差异数据? 分析:由于表结构中字段比较多,手工比较很浪费时间,而且不能保证不出错误.对于 ...
- sqlserver2008 如何定时清理索引碎片
sqlserver2008 如何定时清理索引碎片 查询索引引起的表垃圾碎片sql脚本: SELECT object_name(a.object_id) [TableName] ,a.index_id ...