1.大端存储:高权位数字放在低地址处,低权位数字放在高地指处。(以字节为单位)
2.小端存储:低权位数字放在低地址处,高权位数字放在高地址处。(以字节为单位)
3.变量(char类型)进行运算的时候一定要注意整形提升与截断,最后要注意以什么形式打印出来。
4.v=5.5=101.1=1.011*2^2=(-1)^0*1.011*2^2
S M E
5.浮点数的存储
6.数组指针的用法
7.数组指针的类型
8.指针数组和数组指针
9.一维数组传参
10.二维数组传参
11.二级指针传参
12.函数指针调用函数(*可以写也可以不写)
13.两段有趣的代码
14.函数指针数组
15.函数指针数组在特定条件下简化switch case语句。
16.函数指针数组指针
17.回调函数。
18.qsort
19.一维数组sizeof的细节问题
20.字符数组的细节问题
21.字符串数组的细节问题
22.字符串指针的细节问题
23.二维数组的sizeof的细节问题
24.习题1
25.习题2
26.习题3
27.习题4
28.习题5
29.第7题
30.第8题
31.两个size_t的数相减仍是size_t类型(不会出现负数),注意库函数返回值的使用。
32.神奇的函数(strtok)
33.strerror(errno要包含头文件errno.h)
34.perror头文件为stdio.h
35.一些字符函数
36.字母大小写转换函数
37.memmove理论上是memcpy的升级版(可以自己拷贝自己)。
38.匿名结构体类型在类型创建好了之后直接创建变量,只能用一次。两个完全相同的匿名结构体类型,编译器认为他们的类型是不一样的。
39.结构体可以乱序初始化。
struct 结构体名字 变量名 = {.结构体内的变量名 = 赋的值, …};
40.结构体的内存对齐。
a.结构体的第1个成员,对齐到结构体在内存中存放位置的零偏移处。
b.从第2个成员开始,每个成员都要对齐到一个对齐数整数倍数。(数组按每个元素大小的计算)(对齐数:结构体成员的自身大小和默认对齐数的较小值,vs中默认对齐数是8,gcc中没有默认对齐数)
c.结构体的总大小,必须是所有成员的对齐数中最大的整数倍。(数组按每个元素大小的计算)(包含嵌套结构体成员中的对齐数)
d.如果结构体中嵌套了结构体成员,要将嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处。
41.offsetof(struct s1, 结构体内的变量);
返回该变量的偏移数。
头文件stddef.h
本质上是个宏。
42.使用结构体的时候为了节省空间,尽量把占用空间小的结构成员放在一起。
43.vs修改默认对齐数
44.位段,成员类型必须是整型,并且所有成员必须是同一种类型,只能放在结构体里使用。
45.枚举常量
在使用switch case语句的时候,为了增加代码的可阅读性,建议使用枚举常量。枚举常量的大小是4。
46.联合体需要内存对齐。
47.malloc
48.malloc和calloc的区别。
49.realloc
50.如果要用realloc实现malloc的功能,第1个参数传入空指针(NULL)。
51.在函数内进行动态内存申请,如果没有释放,一定要写上注释。及时释放内存,总之,free函数一定要及时执行(有的时候虽然有这条语句,但是并没有执行,可能被跳过了)。
52.习题1
53.习题2
54.柔性数组,c99标准,结构体中的最后一个元素允许是未知大小的数组。(arr[] 或arr[0])
55. C语言文件
如果以只写的形式打开一个有内容的文件,原来的内容会被清空。
56.文件扩展名一定要展开。
57.文件的顺序读写。
写入:fprintf,fputc,fputs,fwrite
读取:fscanf,fgetc,fgets,fread
58.sprintf,把一个格式化的数据,转化成字符串形式,放到一个字符数组中去(把格式化的数据转化成字符串)。
59.sscanf,从一个字符串中还原出一个格式化的数据。
60.fseek
61.ftell
62.rewind
63.feof
64.缓冲区可以被修改大小,(setbuf)了解一下就可以了。
65.文本文件(格式化文件)和二进制文件的区别。
66.代码翻译
67.预定义符号
68.#的作用
69.##的作用,把两端的符合拼接成一个。
70.宏参数有时带有副作用
71.宏可以传类型
72.宏和函数的对比
73.动态开辟二维数组: