深圳C++培训
达内深圳龙华中心

139-2227-5185

热门课程

浅谈C语言里sizeof的用法,C语言sizeof详解

  • 时间:2017-09-29
  • 发布:深圳C++培训班
  • 来源:达内新闻

首先我想好好分析一下,最近我一直在笔试一直出现的题:sizeof

sizeof,顾名思义,是描述一个数据类型的size的,也就是大小

简单地说,其作用就是返回一个对象或者类型所占的内存字节数。开始我还以为它是简简单单的一个函数而已,在了解后才发现,它的学问多着呢!

首先,sizeof有三种语法形式,分别如下:

1) sizeof( object ); // sizeof( 对象 );

2) sizeof( type_name ); // sizeof( 类型 );

3) sizeof object; // sizeof 对象;

也就是说,不能写成sizeof int;形式

实际上,sizeof计算对象的大小也是转换成对对象类型的计算,也就是说,同种类型的不同对象其sizeof值都是一致的。

这里,对象可以进一步延伸至表达式,即sizeof可以对一个表达式求值,编译器根据表达式的最终结果类型来确定大小,一般不会对表达式进行计算。如:

sizeof(2);由于2是int数据类型,所以也相当于sizeof(int);

再比如sizeof(2+2.11);由于2.11是double数据类型,所以也相当sizeof(double);

sizeof也可以对一个函数调用求值,其结果就是函数返回数据类型的大小,这里就不做例子了。

下面我们再来看一下基本数据类型的sizeof:

32位操作系统里

char:1个字节 short int:2个字节

int:4个字节 unsigned int:4个字节

float:4个字节 double:8个字节

long:4个字节 unsigned long:4个字节

long long:8个字节 *:4个字节

64位操作系统里

char:1个字节 short int:2个字节

int:4个字节 unsigned int:4个字节

float:4个字节 double:8个字节

long:8个字节 unsigned long:8个字节

long long:8个字节 *:8个字节

数组的sizeof

数组的sizeof等于数组所占用的内存字节数,如:

char a1[]="abc"; 那么sizeof(a1)为4。因为

字符串结尾还有一个NULL终止符

int a2[3];那么结果sizeof(a2)为3*4为12,因为

一个int的sizeof是4

结构体的sizeof

终于到了重头戏啦!虽然恶补两天还是没看懂,但是还是得贴出来呀!太重要太难了!

那么,sizeof(S1)等于多少呢?

char占1个字节,int占4个字节,那么加起来就应该是5,对吗?

emmmm不对!不要灰心,我们好好琢磨下sizeof定义:对象或者数据类型占的内存字节数。

观察S1的内存,S1的地址为0x0012FF78,其数据内容如下:

0012FF78:61 CC CC CC FF FF FF FF

为什么中间会插入3个CC呢?

这就是传说中的字节对齐!

计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。

在上面的例子中,char占1位字节,但是该结构体最宽的字节数是int,占四个字节,所以宽度为1的char需自动补全到4的倍数上,所以最后sizeof(S1)就为8。

怎么样,这还是最基础的结构体的sizeof呢!还有更复杂的结构体的sizeof需要我们去讨论和研究,但是基于我还没弄明白!所以接下来的学习任务就要我们一起去学习探讨哦!

---------------------------------------------------------------------------------------------------

好啦,恭喜你终于看到了这里,抵达了讲故事环节。今天的故事关于我,也关于每一个你。

故事的开始是一个男孩,玩玩乐乐的高中结束之后进入玩玩乐乐的大学,按部就班地学习,和一群志同道合的狐朋狗友心照不宣地过着生活。

突然,面临一个选择的时候,他选择了一个与身边的人都截然不同的方向,就像是一路一起旅行的伙伴,突然之间只剩下了你一个人。

而这个选择,就是毕业后的方向。

考研也许更难,但他只是更愿意直面当前。不断地投出自己的简历,近乎轰炸般的笔试和面试。

也许你以为他不行,也许你以为你自己不行。

但是,就像这个男孩,赢得了这家数一数二公司的青睐一样,每颗怀着希望的心,都会获得幸运的垂青。

上一篇:C程序变量和C运算符的初步认识
下一篇:C/C++中extern关键字详解

C语言是自学还是培训好?

武汉C++培训机构:C语言的字符集

C语言如何发现常见错误?120天让你从零基础到大神

C语言是怎么发展的?从零基础到月薪过万

选择城市和中心
贵州省

广西省

海南省