b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C sizeof结构

电脑杂谈  发布时间:2020-03-30 12:08:47  来源:网络整理

sizeof计算结构体大小_sizeof 结构_结构数组 大小

(从

开始

三个准则:

[1]一个结构变量的首个地址可以被其最宽的原始类型成员的大小整除.

[2]该结构的每个成员与该结构的第一个地址的偏移量是该成员大小的整数倍

[3]结构的总大小是该结构中最宽的基本类型成员的大小的整数倍

当结构中只有基本类型时,以上是默认对齐方式.

当有嵌套的复合成员时:

sizeof 结构_sizeof计算结构体大小_结构数组 大小

[2]更改为: 复合成员相对于结构的第一个地址的偏移量是复合成员最宽基本类型大小的整数倍

示例1:

struct tagPhone

{

字符A;

int B;

短C;

}电话;

示例2:

结构数组 大小_sizeof计算结构体大小_sizeof 结构

struct tagPhone

{

字符A;

短C;

int B;

} Phone2;

示例三:

struct tagPhone3

{

结构数组 大小_sizeof 结构_sizeof计算结构体大小

字符A;

字符B [2];

字符C [4];

} Phone3;

我们都知道char类型占1个字节,int类型占4个字节,short类型占2个字节,long类型占8个,double类型占16个. 那么我们可能会直接通过1 + 4 + 2 = 7来犯一个错误,该结构占用7个字节. 这是错误的.

以下是简要分析:

在计算结构的大小时,需要考虑其内存布局. 该结构以内存为单位存储. 每个单元的大小取决于结构中最大的基本类型的大小.

例如一个:

C语言之sizeof结构体

sizeof计算结构体大小_结构数组 大小_sizeof 结构

int类型占据4的倍数. 由于A占用一个字节,B无法容纳,因此打开一个新的单元,然后再打开一个新单元以放置C,因此格式1占用的字节数为: 3 * 4 = 12;

类似地,例如两个

C语言之sizeof结构体

A之后有三个字节,足以存储C,因此C存储在A之后sizeof计算结构体大小,然后创建一个新的单元来存储B数据. 因此sizeof计算结构体大小,格式2占用的内存字节为2 * 4 = 8.

例如三个:

C语言之sizeof结构体

计算出上述结构的大小,sizeof(Phone3)= 1 + 2 + 4 = 7,它的大小是该结构中字段大小的总和.

摘要:

第一种书写方式是严重浪费空间. 计算出的sizeof大小与期望值不一致,但是每个字段的数据类型都得到维护. 这也是最常见的粗心书写方式,普通人很容易这样写;

第三种写方法,也是最节省空间的写方法,也是使用sizeof查找与预期大小相同的大小,但是全部使用字节类型,则字段本机数据类型丢失了,而且不方便使用;

介于第一和第三种写入之间的第二种写入在空间上更紧凑,同时保留了结构中字段的数据类型.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-157719-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...