关键词不能为空

当前您在: 主页 > 英语 >

C语言中的sizeof的理解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:54
tags:

-

2021年3月3日发(作者:摄氏度英文)


C


语言中的


sizeof


的理解。。



一、


sizeof


的概念





sizeof



C


语言的一种单目操作符,如


C


语言的其他操作符


++



--


等。它并不是函数 。


sizeof


操作符以


字节


形式给出了其操作数的存储大小。操作数可以是一个表达式或


括在括号< /p>


内的类型名


。操作数的存储大小由操作数的类型决定。

< p>




二、


sizeof


的使用方法





1


、用于数据类型




sizeof


使用形式:

< p>
sizeof



type








数据类型必须用括号括住。如


siz eof



int








2


、用于变量




sizeof


使用形式:

< p>
sizeof



var_name


)或


sizeof



var_name







变量名 可以不用括号括住。如


sizeof



(var_name)



sizeof



var_name


等都是正确形式。


带 括号的用法更普遍,大多数程序员采用这种形式。







注意:


sizeof


操作符不能用于函数类型,不完全类型或位字段。


不完全类型指具有未知


存储大小的数据类型,

< br>如未知存储大小的数组类型、


未知内容的结构或联合类型、


void


类型


等。








sizeof(max)


若此时变量


max


定义为


int



max(),sizeof(char_v)


< p>
若此时


char_v


定义为


char



char_v



[MAX]



MAX


未 知,


sizeof(void)


都不是正确形式。





三、


sizeof


的结果





sizeof


操作符的


结果类型是


size_t



它在头文件中


typedef



uns igned



int


类型。

< p>
该类型


保证能容纳实现所建立的最大对象的字节大小。






1


、若操作数具有类型


char



unsigned



char



signed



char


,其结果等于


1








ANSI



C


正式规定字符类型为


1


字节。







2



int



unsigned



int




short



int



unsigned



short




long



int




unsigned



long




float



double



long



double


类型的


sizeof




ANSI



C


中没有具体规定,


大小依赖于实现,


一般可能分别为


2



2



2



2


4



4



4



8


、< /p>


10








3


、当操作数是指针时,


sizeof


依赖于 编译器。例如


Microsoft



C /C++7.0


中,


near


类指


针字节数为


2



f ar



huge


类指针字节数为


4


。一般


Unix


的 指针字节数为


4








4


、当操作数具有数组类型时,其结果是数组的总字节数。







5


、共用体类型操作数的

< p>
sizeof


是其最大字节成员的字节数。结构类型操作数的


sizeof


是这种类型对象的总字节数。







让我们看如下结构:







struct



{char



b;



double



x;}



a;







在某些机器上


sizeof



a



=12


,而一般


sizeof



char


+



sizeof



double



=9








这是因为编译器在考虑对齐问题时 ,在结构中插入空位以控制各成员对象的地址对齐。



doub le


类型的结构成员


x


要放在被


4


整除的地址。







6


、如果操作数是函数中的数组形参或函数类型的形参,


sizeof


给出其指针的大小。





四、


sizeof

< br>与其他操作符的关系





sizeof


的优先级为


2


级,比


/



%



3


级运算符优先级高。它可以与其他操作符一起组成


表达式。如


i*sizeof



int



;其中


i< /p>



int


类型变量。




五、


sizeof


的主要用途





1



siz eof


操作符的一个主要用途是与存储分配和


I/O

< p>
系统那样的例程进行通信。例如:







void



*malloc

< p>


size_t



size



,







size_t



fread(void



*



ptr, size_t



size, size_t



nmemb, FILE



*



stream)








2



sizeof


的另一个的主要用途是计算数组中元素的个数。例如:







void



*



memset



void



*



s, int



c, sizeof(s)







六、建议





由于操作数的字节数在实现时可能 出现变化,建议在涉及到操作数字节大小时用


sizeof


来代 替常量计算。




< br>本文主要包括二个部分,第一部分重点介绍在


VC


中,< /p>


怎么样采用


sizeof


来求结构体的< /p>


大小,以及容易出现的问题,并给出解决问题的方法,第二部分总结出

VC



sizeof


的主要


用法。




1




sizeof


应用在结构体上的情况





请看下面的结构:



struct



MyStruct



{



double dda1;



char dda;



int type



};





对结构


MyStruct


采用


sizeof< /p>


会出现什么结果呢?


sizeof(MyStruct)


为多少呢?也许你会这


样求:




sizeof(MyStruct)=sizeof(dou ble)+sizeof(char)+sizeof(int)=13





但是当在


VC


中测试上面结构的大小时,你会发现


sizeof(MyS truct)



16


。你知道为什


么在


VC


中会得出这样一个结果吗?





< p>
其实,


这是


VC


对变量存 储的一个特殊处理。


为了提高


CPU


的 存储速度,


VC


对一些变


量的起始地址 做了



对齐



处理。


在默认情况下,


VC


规定各成员 变量存放的起始地址相对于


结构体的起始地址的偏移量必须为该变量的类型所占用的字节 数的倍数。


下面列出常用类型


的对齐方式


(vc6.0,32


位系统


)







类型




< /p>


对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)






Char




偏移量必须为


sizeof(char)


< br>1


的倍数






int





偏移量必须为

sizeof(int)



4


的倍 数






float



偏移量必须为


sizeof(float)



4


的倍数






double




偏移量必须为

sizeof(double)



8


的倍数






Short




偏移量必须为


sizeof(sho rt)



2


的倍数





各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,


同时按照上面的对齐< /p>


方式调整位置,


空缺的字节


VC


会自动填充。


同时


VC


为了确保结构的大小为结构体的字节


边界数


(即该结构中占用最 大空间的类型所占用的字节数)


的倍数,


所以在为最后一个成员


变量申请空间后,还会根据需要自动填充空缺的字节。






下面用 前面的例子来说明


VC


到底怎么样来存放结构的。




struct MyStruct


{



double dda1;



char dda;


-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:54,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700096.html

C语言中的sizeof的理解的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文