单片机 器件手册
SFR单片机特殊功能寄存器
单片机,RFID,嵌入式…
操作相当于让U的2和3bit(位)变为了1
对微处理器内部寄存器进行位操作,偏底层,需要查看对应芯片的数据手册
可变数组
意思就是,如果结构变量名字加* 就不能定义同名的本地变量了,不然会修改指针的值
可以定义两个,一个带星,一个不带,需要哪个用哪个,这就是数据结构里面链表经常用的,用来强调这是一个链表还是一个节点
实际上free只是将malloc分配的内存释放(交还),而指针变量依然存在
为防止指针悬空的情况下再次调用free把该片内存中其他的数据给杀了
所以要让指针指向NULL
free NULL是无害的
这种是拼接不了的,只能重新申请更大的空间,因为你原来申请的那片空间的后边已经被使用了
如果直接blocksize那么如果越了30个不就要调用两次了嘛,可是现在只要用一次就可以了。不用再判断了。
标准库函数 memcpy ,实现数组拷贝
(翻译)问题:每次膨胀时分配新内存是一种简单而干净的方法。但复制需要时间,并且在内存受限的情况下可能会失败。
链表linked-list
链表+hash+数签+分布式 +n.....= 区块链
让last指向head所指的结构体,当这个结构体的next!=null时,last就继续指向next所指的结构体,再判断该结构体的next,直到next=null
null是没有arrow的,是在讨论这个链表只有头节点的情况
尾插法
提示:这里我们要改的是链表的地址也就是head(看成一个值)。函数这边确实改了地址但是是*head的地址,我们要改的是head这个地址的地址才能改掉head的地址。
这里的如果使用全局变量head,如果程序有其他类型的链表节点,就不能再次使用这个head,必须另外定义
毕竟你写的库人家没那么熟悉 写错是有可能的 很多标准库函数都是要求传指针的同时返回指针
把指针的地址传到函数里面,对这个地址的修改,就是对传进来的这个指针进行修改
这里定义的结构体,其实也是用了二维指针的技巧,只不过用结构听就不会出现**,看起来不那么复杂
自己定义一个数据结构来代表整个list,给将来升级改进list带来无限可能,不再是一个悬在外面的head。 对于 工程化的程序 来说、需要告诉人家如何合理的安排这些东西
c语言结构体变量的地址是啥呢?
struct ss { int a[4]; char b[4]; } str; 这个str的地址是不是与数组a地址相同呢?
是相同的。
str是一个结构体的变量。类型为struct
ss。而a[4]是这个结构体的每一个成员,str的地址值与int
a[4]的地址值一样,但仅仅是地址值是一样的,而地址是有类型的,两者类型不一样,str的地址类型为sturct
ss
*,而成员a[4]的地址类型为int
*。