C语言数据在内存中的存储和结构体&联合体&枚举

1.无符号整形提升时,直接补零

2.char类型的取值范围是-128~127

无符号的话是0~255

3.要直接打印时也是先提升后打印

4.int就是十进制

5.1E10就是1乘以10的10次方

6.浮点数存储会存在误差,所以要相减然后用这个值比较某个范围

7.匿名结构体只能用一次,就是在全局变量那里用

8.关于结构体的自引用:可以在结构体内部创建并存储该结构体类型变量的指针(即地址),但不能再在内部创建该结构体

9.结构体内存对齐

10.是一个一个的来对齐的,对齐的目标点是当前的成员的占用空间(与编译器默认某个值(VS默认是8)的较小值)的倍数

11.对齐了之后又要整体对齐内部   最大   单个占位空间值的整数倍

12.关于10和11:我一般不喜欢偏移量,更喜欢编号

偏移量为0则编号为1,偏移量为1则编号为2...

则编号为建议量加1

13.如果在结构体内部有结构体,那么里边那个结构体所占据的空间的那个起始的点要从该结构体整体的对齐数开始

14.在设计结构体时,我们尽量要将占用空间小的统统放到一块

15.位段后边数字的单位是比特位

16.在VS上:

(1).从右往左使用(然后呈现在内存上的就是我直接写出来的数据(内存呈现上右边大))

(2).如果剩余空间不够下一个成员使用,就浪费

17.位段的各个成员并非都有地址,所以不能对其使用&操作符,如果要赋值的话,就得要先造一个临时变量,然后再通过其赋值给位段的各个成员

18.联合体公用空间

19.联合体的大小:

联合体的大小至少是最大成员的大小.

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

20.对于数组来讲,他这个数组的默认对齐数是其单个元素的大小

21.最大对齐数与编译器默认的那个值无关

22.结构体的关键字:struct

联合体:union

枚举:enum

23.枚举使用示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include

enum gender
{
	Male = 5,
	Female = 8,
	Serect
};

int main()
{
	printf("%d\n", Male);
	printf("%d\n", Female);
	printf("%d\n", Serect);
	//输出:
	//5
	//8
	//9
	//上边的Male和Female等统称枚举常量,他们是常量
	//所以下边代码
	//Male = 2;
	//是错的
	return 0;
}

24.我们常用枚举常量而不是#define,增加代码可读性

你可能感兴趣的:(C语言复习,c语言,开发语言)