尾插
头删
尾删
双向链表
前驱指针
后继指针
循环链表
进程:正在被运行的程序
后续的节点在堆上,堆上由malloc申请的空间要释放,否则会造成内存泄漏
共用体:(公用内存)与结构体的用法很像,都需要自定义
在共用体内的成员,会共同占有相同的内存空间
内存中,叠在一起。都是往前挤第一块内存空间,所以他们的地址值是一样的
彼此之间,相互重叠覆盖,因此共用体中的有效元素只是最后传进去的变量的值
作用:判断计算机是大端还是小段
两种判断大小端的方法:
1、通过写入一个数,读取这个数的低位判断
2、通过共用体判断
共用体变量可以作为函数参数传递
通过指针传参
sizeof共用体的长度,按共用体中长度最大的来,但当字节数为奇数时,依然要按照两个字节对齐,提高运行效率
枚举(enum)
列举所有的可能性
enum 变量名
{
枚举的元素
};
枚举与int型兼容,在计算内存时按照整形变量计算,枚举只能枚举整形或者与整形兼容的类型
typedef定义类型
给已有的类型名起别名,
从此以后,INT不再是一个变量名,而是一个类型名
位运算
按位与(&):
作用是指定位清零
按位或(|):
指定位置1,其他位不变
按位异或(^):
指定位翻转(取反)
应用:不定义中间变量交换两个数
将一个数(i)与同一个数异或两次,仍会得到这个数本身(i)
取反(~):单目运算
左移(<<):
抛掉最高位,在后面补零
左右移的优先级低于算术运算,又高于与,或的优先级
指定位置零
判断某个比特位是1还是0:
与上一个除了那个比特位是一,剩下都是零的数
判断一个十六进制数有几个一
右移与左移移动的方向相反
右移运算分为算术右移和逻辑右移
逻辑右移和左移一样都是补零
但如果要移动的数据类型是有符号的数据类型
那么补什么数要看原来的数是正数还是负数
左移只有逻辑左移
为避免算数运算的出现,在进行位运算时,最好把数据类型定为无符号型unsigned