面试笔记3(结构体、共用体和枚举)

1.class的成员访问权限默认为private

 struct的成员默认访问权限为public

2.只要当定义属于结构体类型的变量时,系统才会分配空间给该变量。

  结构体类型中不允许对结构体本身的递归定义。但可以使用指针指向本类型。

  结构体可以嵌套。另外结构体变量可以在定义时进行初始化赋值。

3.c和c+=允许制定占用特定位数的结构成员。字段的类型应为整型或枚举,接下来是冒号,然后面试指定的位数。每个成员被称为字段。

位域的使用和结构体的使用相同。

4.共用体union只存放一个被选中的成员,而结构体的所有成员都存在。

共用体的用途之一是当数据项使用两种或更多格式时,会节省空间。

共用体占用内存为成员中占用内存最大者。

5.共用体union的存放顺序是所有成员从低地址开始存放,经常与大端模式、小端模式一起考察。

6.大端格式存储

高字节的放在低地址。端:可以理解为开始存储的地方。跟正常的书写顺序相同。

7.小端格式存储

低字节的放在低地址。跟正常的书写顺序相反。

8.long  long 是八个字节。int是四个字节 。%d 表示是四个字节。printf函数时最后一个元素先入栈。

9.大小端对位域成员的存放也不一样。

大端:

低字节存放在低地址。 大端首先为字段高的bit位分配空间。首先存放地址的高bit位。大小端是相对于字节。字节里的内容是一样的。不过对位域就不一样。

注意:地址的高bit位。位于前面的字段是属于高bit位的。

10.c++的enum工具提供了另一种创建符号常量的方式,这种方式可以替代const。

enum 枚举类型{枚举变量   };

11.sizeof是一个单目运算符,它并不是函数。sizeof以字节形式给出了其操作数的大小。会忽略括号内的各种运算。

发生在编译时刻,所以会被当做常量表达式使用。

12.sizeof 可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会调用。

但是只输入函数名,没有后面的括号,不能求出sizeof值。

位域成员不能计算sizeof值。

13.strlen是计算字符数组的字符数,不包括 \0

14在32位机器系统下,所有指针变量的sizeof操作结果均为4,在64位机器系统下,所有指针变量的sizeof结果为8.

15.所有引用变量的sizeof,等同于被引用对象的sizeof

16.若系统使用utf-8编码,则一个汉字占用三个字节。

若在windows环境下编译,一个汉字占用两个字节。

17.struct 

a. 整体空间是占用空间最大的成员所占字节的整数倍。

b.数据对其,内存按结构体成员的先后顺序排列,其前面已经摆放的空间大小必须是该成员类型大小的整数倍,如果不够则补齐。

当含有结构体成员时,必须是子结构体和父结构体成员等的整数倍。

18.注意数组不能视为整体,要看单独的元素。

19.如果相邻字段相同,则后面的字段紧邻前面的字段。

如果不同,则看编译环境。如果位域穿插着非位域字段,则不进行压缩。

整个结构体的总大小为最基本类型成员大小的整数倍。

20.#pragma pack (n) 编译器将按照n字节对齐。

#pragma pack () 取消自定义字节对齐方式。

21.空结构体或类的大小是1.

22.union也需要跟struct一样要必须保证对齐问题,对齐必须是最大类型的整数倍。

23.enum只是定义了一个常量的集合,没有元素,而枚举类型是当做int类型存储的,故枚举类型的sizeof值都为4.

24.sizefo(strb++)实际并没有执行++运算,这是因为sizeof是在编译阶段处理的运算符,会忽略里面的各种算术运算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值