c语言sizeof的用法
计算机英语1.58W
sizeof一般形式为:sizeof(object),也可以sizeofvar_char,不过大部分programer习惯用sizeof()。 对象可以是表达式或者数据类型名,当对象是表达式时,括号可省略。下面小编就为大家介绍c语言sizeof的用法。 sizeof是单目运算符,其运算符的含义是:求出对象在计算机内存中所占用的字节数。一般来讲,不同的机器,运行不同的对象是不一样的,当目前几乎所有的机器都是32位,很少16位的,所以一般考试都是基于32位的window和linux的。C语言中数据类型不多。 1.整数型的: short,int,long一般c语言书上讲,int是2个字节的,即16位,范围是-32768-32767,long是4个字节,范围是-2^32---2^32-1。当时在xp上运行sizeof(int)的时候,会output4.这就是32位的原因。sizeof(long)也是4. 如下:#include"stdio.h"#include"string.h"#include"stdlib.h"intmain(){ shortintsa=10;inta=10;longla=10;floatf=20;doubled=20;charch=''c''; charstr[]="ABC";char*p=str;structstr{doubled;charch;intdata;}str_wu;structstr1{charch;doubled;intdata;}str_wu1; printf("sizeof(short):%dn",sizeof(sa));printf("sizeof(int):%dn",sizeof(a)); printf("sizeof(long):%dn",sizeof(la));printf("sizeof(float):%dn",sizeof(f));printf("sizeof(double):%dn",sizeof(d));printf("sizeof(char):%dn",sizeof(ch));printf("sizeof(string):%dn",sizeof(str)); printf("sizeof(pointaddress):%dn",sizeof(p));printf("sizeof(Point):%dn",sizeof(*p));printf("sizeof(Struct):%dn",sizeof(str_wu));printf("sizeof(Struct):%dn",sizeof(str_wu1));system("pause");} 因而int,short的sizeof结果是一样的额。 2.浮点型数据 float,double,longdouble 指针对于指针,要特别区分,指针指向什么数据,它在内存占的字节数才是它的结果。比如:指针指向一个字符串,就是字符串的长度,因为一个字符在内存中占一个字节。若指针指向一个数据结构,则结果应该是结构型数据的内存字节数。 4。结构类型 在上面的程序中,structstr{doubled;charch;intdata;}str_wu;structstr1{charch;doubled;intdata; }str_wu1; 两个不同的结构,但是内部的元素是相同的,都是double,int,char,只是顺序不一样,就结果不一样。why? 这时因为VC存储数据的时候要对其,具体的情况如下:类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)Char 偏移量必须为sizeof(char)即1的倍数int 偏移量必须为sizeof(int)即4的倍数float 偏移量必须为sizeof(float)即4的倍数double 偏移量必须为sizeof(double)即8的倍数Short 偏移量必须为sizeof(short)即2的倍数 比如:str_wu,为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。所以整个结构的大小为:sizeof(str_wu)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。 而str_wu1,同样的道理:如下:sizeof(char)=1,而1不是8的倍数,因而增加到8,sizeof(double)=8,现在开始地址是16,16是sizeof(int)的倍数,可以存入。 因而总的地址数:sizeof(char)+7+sizeof(double)+sizeof(int)=20,而20不是8的倍数(sizeof(double)=8),所以需要在增加4个地址,即总共24。---------------------- sizeof具体的,我所知道的就这些了,那位高手还知道什么,或者我写的有什么错,希望指出。谢谢!
-
有关网上购物的英语情景对话
有很多同学讲,英语口语学起来都头痛,所以小编今天特地整理了英语口语的情景对话给大家练习英语的口语,英语口语其实多读多背就会很快的提升了。你的网上购物经历可以和我们分享吗AHaveyouevershoppedonline?你有在网上购物过吗?BQuiteoften.Itisveryconvenient,sa...
-
调制解调器的介绍
调制解调器它是一个将数字信号调制到模拟载波信号上进行传输,并解调收到的模拟信号以得到数字信息的电子设备。接下来小编为大家整理了调制解调器的介绍,希望对你有帮助哦!Telephonelinesweredesignedtocarrythehumanvoice,notelectronicdatafromacomputer.Modems...
-
c语言单引号的用法
C语言中用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。因此's'的含义其实和十进制数115的含义是一致的。下面小编就给大家介绍下c语言单引号的用法。单引号...
-
网络英语词汇释义
网络,原指用一个巨大的虚拟画面,把所有东西连接起来,也可以作为动词使用。接下来小编为大家整理网络英语词汇释义。希望对你有帮助哦!HTTP:HyperTextTransmissionProtocol,超文本传输协议。IP:IP国际互联网协议,即网际协议。IE:InternetExplorer,Explorer意为探险者...