尾插:
头删:
尾删:
双向链表:
循环链表:
内存泄漏(malloc 调用的节点需要手动清除)
清除:
头删效率更高,算法复杂度更低
共用体
共用体的成员,会共同占用相同的内存空间
共用相同的内存空间(最大的),有效的为最后输入的字节
为了节省空间
共用体的覆盖总是向前顶,所以成员地址都相同
利用共用体,判断计算机的大小端
判断IP地址:
共用体的变量可以作为函数参数传递,通过指针传参
共用体也要遵循对齐原则
枚举类型
如果一个变量只有几种可能,则可以定义为枚举类型
week 可能的取值为定义的枚举型常量
枚举的常量可以自己定义
本质为int ,排列和数组类似
用typedef定义类型
INT变成类型名
为已有的数据类型起别名
a为整型一维数组
位运算
按位与:指定位 清零
32灯全亮 --第3个灯灭
所有位运算要求数据类型为整型或与整型相兼容的
按位或:指定位 置1,其他位不变
按位异或:指定位 翻转
两个比特位相同,结果为0,不同为1
不使用中间变量,交换两数:
连续两次异或同一个数,还是数本身
按位取反:(单目运算符)
左移:
逻辑左移,抛掉最高位,补0
判断某个比特位是0还是1
计算1的个数:
右移:
算数右移:有符号类型,最后一位移出去后,前面有可能补0(i 为正数),也有可能补1(i 为负数)
逻辑右移:无符号类型,最后一位移出去后,前面补0
建议编写参与位运算的数据类型时,标明是否有符号,即加signed 或 unsigned
------------------
嵌入式学习第十七天,今天c语言全部结束,做了个小测试发现自己c语言方面的还是有许多欠佳的地方,很多东西的概念都不是很清晰,全都是一知半解的,所以很多题目没有头绪,还有就是各种常用的算法记忆也不是特别牢固。所以后面的学习还是要经常回过头来复习c语言方面的知识,多想多练,后面继续加油吧