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

结构,联合,枚举,sizeof

电脑杂谈  发布时间:2020-05-31 22:24:00  来源:网络整理

大小结构_数组大小 sizeof_sizeof计算结构体大小

某些信息在存储时不需要占用完整的字节. 有时只需要占用一个或几个二进制位. 为了节省存储空间并简化处理,C语言提供了一种数据结构,该结构成为字段“或”位段”.

C和C ++允许您指定占用一定位数的结构成员. 字段类型应为整数或枚举,后跟冒号: ,后跟数字,该数字指定使用的位数,并且可以使用未命名的字段来提供空格. 每个成员称为一个位字段. 示例:

1 struct reg 
2 {
3       unsigned int SN:4;
4       unsigned int :4;
5       bool  good: 4;   
6 };

联合和结构的存储顺序是所有成员都是从本地地址开始存储的.

联合占用的内存大小应基于联合成员占用的最大内存,并应考虑对齐问题.

大端存储格式: 数据的高字节存储在低位地址,低字节存储在高位地址.

小尾数存储格式: 数据的高字节存储在高地址中,低字节存储在低地址中.

当输出printf函数时,要输出的变量保存在堆栈上,最后一个输出首先被压入堆栈,最后一个要输出的变量最后被压入堆栈.

printf函数首先将最右边的元素放在堆栈上. 如果堆栈上的元素是char,short和其他类型的小于4个字节的元素,那么在堆栈时它们也将占用4个字节,因此printf(“%d%d”,'a','b');不会发生. 输出错误(如果堆栈不是4个字节,则输出堆栈时将输出4个字节,将发生错误);当它大于4个字节(例如longlong)时,实际的字节数将被压入堆栈. 通过只需要字符串的指针将字符串参数压入堆栈.

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

一个关键点是: 将char,short和其他类型放入堆栈时,高位用0或1填充.

当数字是无符号类型(例如unsignedshort)时,高位始终用1填充;当数字是有符号类型(例如short)时,高位用符号位填充.

大小结尾还影响位字段的存储. 如果定义的数据结构包含位字段,则将根据以下规则进行存储:

1)低字节存储在低地址中;

2)大端模式首先为该字段的高位分配空间,小端模式首先为该字段的低位分配空间;

3)大端模式首先存储地址的高位,而小端模式首先存储地址的低位.

C ++的枚举工具提供了另一种创建符号常量的方式,该符号常量可以替换const. 使用枚举的语法类似于使用结构的语法.

枚举是用户定义的类型. 定义的基本格式为:

枚举枚举类型名称{枚举常数1 [=整数常数],枚举常数2 [=整数常数],枚举常数3 [=整数常数] .......} [变量名列表]

大小结构_数组大小 sizeof_sizeof计算结构体大小

大括号中的内容成为一个枚举表sizeof计算结构体大小,并且其中的每个项目都成为一个枚举常量. []中的整数值将初始值分配给枚举常数,可以将其省略. 一个不同的整数值会自动分配给每个枚举常量. 在枚举表中分配常量后,将按照顺序加1的规则为后续成员分配初始值.

sizeof是单目运算符,不是函数. sizeof运算符以字节为单位给出其操作数在内存中的存储大小. 操作数可以是括号中的表达式或类型名称,括号中的各种运算都将被忽略. 例如,不会执行sizeof(++)中的++.

sizeof(“ \ 0”)= 2.

汉字在内存中占用的字节数与系统有关. 通常,在Windows下,它占用2个字节. 但是,在Linux环境中,如果系统使用UTF-8编码,则汉字占用3个字节.

当数组用作形式参数时,数组名称用作指针. 此时,sizeof(数组名称)= sizeof(指针);对于32位系统为4.

结构空间的计算较为复杂,通常遵循两个原则:

1)总体空间是最大成员(类型)占用的字节数的整数倍,但是在32位linux + gcc环境中,如果最大成员类型所占用的字节数超过4 ,如果double是8,则整个空间可以是4的整数倍.

2)数据对齐的原理----内存按结构成员的顺序排列. 将其布置到成员变量时,放在其前面的空间大小必须是成员类型大小的整数倍. 如果还不够,它将完成,并且将向后进行类比. 但是,在linux + gcc环境下,如果某种类型占用的字节数超过4,例如double是8,则已经放在前面的空间是4的整数倍,并且如果这还不够.

当其他结构嵌套在该结构中时,以上两个原则应修改为以下两个:

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

1)总体空间是在子结构和父结构中占据最大空间的成员(类型)所占用字节数的整数倍,但是在linux + gcc环境中,如果单词被最大的成员类型部分的数量超过4sizeof计算结构体大小,如果double是8,则整个空间可以是4的整数倍.

2)数据对齐的原理---父结构按结构成员的顺序排列. 当将其布置在子结构上时,布置在其前面的空间必须是子结构成员中最大的一个. 如果大小不够,请填充大小的整数倍,以此类推. 但是,在linux + gcc环境下,如果某个成员类型占用的字节数大于4,例如double为8,则放在前面的空间大小为4的整数倍,并且如果不够的话,它将被填充.

在结构中,根据单个变量而不是整个变量将数组一个接一个地放置.

不能通过sizeof单独对位字段成员进行赋值,但是sizeof可以用于获取包含位字段的结构的大小.

使用位字段的主要目的是压缩和存储,一般规则是:

1)如果相邻位字段的类型相同,并且它们的位宽之和小于该类型的大小,则以下字段将存储在前一个字段的旁边,直到无法容纳为止.

在vs2010环境中,inta: 4,如果不是位字段,则占用4个字节,在Dev-c ++和linux + gcc环境中,无论它是什么类型,占用的字节数以时间所占的字节数为准,以便于后续结构成员的放置,即int: 4. 如果后面不是位字段,则仅占用1个字节.

2)如果相邻位字段的类型相同,但是它们的位宽之和大于该类型的大小,则其后的字段将从新存储单元开始,并且偏移量将是类型大小的整数倍.

3)如果相邻位字段的字段类型不同,则每个编译器的具体实现也不同. VC6不采用压缩,而Dev-c ++和linux + gcc采用压缩方法.

大小结构_数组大小 sizeof_sizeof计算结构体大小

4)如果非位字段散布在位字段之间,则不执行压缩.

5)整个结构的总大小是最宽的基本类型成员的大小的整数倍.

#pragma pack(n)编译器将按n个字节对齐

#pragma pack()取消自定义字节对齐.

请注意,如果结构成员中最大成员类型的大小小于n,则n无效,即根据结构中最大类型成员的大小对齐,否则,将n对齐.

offsetof(item)= min(n,sizeof(item))

#pragma pack(推送)将当前包设置保存到堆栈中

#pragma pack(pop)恢复以前的包设置

枚举仅定义一个常量集,没有“元素”,并且枚举类型存储为int类型,因此枚举类型的sizeof值为4.

今天{enumday {morning,moon,moonmoon}今天;

sizeof(day)= 4,sizeof(today)= 4;

字符串名称;

name.size()计算长度,不包括'\ n';


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

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

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