2. 了解到1中assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference counting),还是上面的那个例子,我们给那块内存设一个引用计数,当内存被分配并且赋值给a时,引用计数是1。当把a赋值给b时引用计数增加到2。这时如果a不再使用这块内存,它只
需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把引用计数减1。当引用计数变为0的时候,代表该内存不再被任何指针所引用,系统可以把它直接释放掉。
const
变量修饰符,只有只读权限,意思是这个参数只能读,不能修改内容,谁近修饰谁。
用途: 1.便于测试快速找到问题
2如果是大型算法可以快速找到是哪个模块出现错误
修饰位置:

register
//register int b = 0;
变量前面加register修饰,编译器会优先将此变量放在寄存器中,这样对这个变量进行的各种操作及运算,会很快,(适用于嵌入式编程)当然CPU周边的用户可用空闲寄存器是有限的,所以当定义多个register修饰的变量后,当可用寄存器已被占完,后面的变量即便用register修饰,也是不起作用的,依然是在普通内存中为变量开辟空间。
static
有时候我们非常希望,用一个小变量记录某函数调用的次数,解决这个问题
方法1、可以使用全局变量;但是由于所有函数都可以修改它,对于较大程序出了问题不好调,所以使用全局变量并不好。
方法2、可以在目标函数中定义一个static变量(测试会发现这个变量的地址已经不再栈区,而是在数据区),每次进入函数让其++,static作用在局部变量前,函数结束此变量的值不清空,即改变了此变量的生命期,而且直到整个程序结束,并且此变量的值只有在定义它的函数中才可以被使用和重新赋值
extern
extern int n;
extern可以扩展全局变量或函数的作用范围,只有全局变量或函数才可以用extern扩展










