关键词不能为空

当前您在: 主页 > 英语 >

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的理解的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文