C语言 判断题 结构体字节数变量所占的空间字节数等于其成员变量所占空间字节数的最大值

  先介绍一个相关的概念——偏移量偏移量指的是结构体字节数变量中成员的地址和结构体字节数变量地址的差。结构体字节数大小等于最后一个成员的偏移量加上朂后一个成员的大小显然,结构体字节数变量中第一个成员的地址就是结构体字节数变量的首地址  实际上,由于存储变量时地址對齐的要求编译器在编译程序时会遵循两条原则:一、结构体字节数变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体字节数大小必须是所有成员大小的整数倍。 对照第一条上面的程序段中第一个结构体字节数的两个成员的偏移量都滿足要求,所以第一个结构体字节数的大小是sizeof(float)+sizeof(char)*6=4+1*6=10,那么第二个结构体字节数的第二个成员的偏移量就成了10,这显然不是其本身的类型float的大小的整數倍编译器在处理时会在第一个成员后面补上2个空字节,使得第二个成员的偏移量变成12那么第三个成员的偏移量就成了12+第二个成员的夶小sizeof(float)*5=12+4*5=32这时所有的成员偏移量都成立了,那么根据结构体字节数大小等于最后一个成员的偏移量加上最后一个成员的大小struct st 的大小就等于32+sizeof(double)=32+8=40!至於你所说的34是不可能成立的就算不补齐也不是34而是38啊..你算错哪里了呢?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机鏡头里或许有别人想知道的答案。

我要回帖

更多关于 结构体字节数 的文章

 

随机推荐