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的用法的一些归纳的更多相关文章

  1. C#中sizeof的用法实例分析

    这篇文章主要介绍了C#中sizeof的用法,包括了常见的用法及注释事项,需要的朋友可以参考下.   sizeof是C#中非常重要的方法,本文就以实例形式分析C#中sizeof的用法.分享给大家供大家参 ...

  2. c++之sizeof的用法

    在此温习一下c语言中sizeof的用法以及c++11.0的标准中,关于初始化的新方式,先上代码: # include "iostream" # include "stri ...

  3. C语言中sizeof()的用法

    语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...

  4. sizeof的用法

    因为对sizeof不是很了解,所以去查了博客啥的,发现还是有大学问的,以下对其用法进行总结. 参考:https://www.cnblogs.com/zhangyz/articles/4736758.h ...

  5. C语言中sizeof的用法

    今天同学问我sizeof可不可以计算结构体的大小,我竟然忘了C语言还有sizeof这个函数,我是多久没有写程序了啊!!!惭愧,上研究生后写嵌入式方面的程序就特别少了,看来以后还要经常来练练手才行.现在 ...

  6. sizeof的用法 2007-12-19 11:06

    sizeof的作用是什么?sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数.其返回值类型为size_t,在头文件stddef.h中定义 ...

  7. 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

    一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...

  8. c++中sizeof的用法

    /*测试sizeof() 测试环境:windows 7 64位操作系统 VS2012编译器 */ #include <iostream> using namespace std; int ...

  9. sizeof新用法(c++11)

    1.概念 1)sizeof是关键字,也是运算符,用来求对象占用空间的大小,返回字节数 2)c++11允许使用作用域运算符(::)来获取类中成员的大小,以前只允许先创建一个类的对象,通过类对象访问成员得 ...

随机推荐

  1. org.apache.hadoop.fs-Seekable

    本来要先看BufferedFSInputStream的,但是它实现了Seekable和PositionedReadable接口,就先看这两个,再看它会比较容易理解些 package org.apach ...

  2. javascript 十六进制与RGB颜色值的相互转换

    http://www.zhangxinxu.com/wordpress/?p=646 http://www.zhangxinxu.com/wordpress/?p=646 -------------- ...

  3. [JavaEE,MVC] Struts工作原理

    基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用MVC模式,能够很好地帮助java 开发者利用J2EE开发Web应用.和其他的java架构一 ...

  4. Java基础知识强化之网络编程笔记24:Android网络通信之 AndroidAsync(基于nio的异步通信库)

    1. AndroidAsync   AndroidAsync 是一个基于nio的异步socket ,http(客户端服务器端),websocket,socket.io库,AndroidAsync 是一 ...

  5. Virtualbox - Fatal: Could not read from the boot medium; system halted!

    刚装好的虚拟机系统,重新打开Virtualbox时出现个什么提示没认真看,顺势点了下去......结果虚拟机的xp系统打不开了,启动后出现:Fatal: Could not read from the ...

  6. FragmentTabHost切换Fragment时避免重复加载UI

    使用FragmentTabHost时,Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决办法:在Frag ...

  7. SQLite的查询

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. 在手机网页中使用USEMAP

    因为手机网页中图片大多数使用百分比显示 所以USEMAP的坐标错位 http://files.cnblogs.com/files/jweb/jquery.rwdImageMaps.min.js < ...

  9. Java Concurrency - ScheduledThreadPoolExecutor

    The Executor framework provides the ThreadPoolExecutor class to execute Callable and Runnable tasks ...

  10. Quartz Scheduler(2.2.1) - Usage of Calendars

    Quartz Calendar objects (not java.util.Calendar objects) can be associated with triggers at the time ...