指针定义
指针是一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的是整型数据,代表内存的编号,通过这个编号可以访问对应的内存
为什么要使用指针
1、函数之间相互独立,但有时候需要共享变量
传参是单向值传递
全局变量容易命名冲突
使用数组还需要传递长度
命名空间是独立的,但是地址空间是同一个,所以指针可以解决这个问题
2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传递效率较低,如果传递的是变量的地址只需要传递4\8字节,可以提高传参效率
3、堆内存无法取名字,它不像data、bss、stack内存段可以让变量名与内存之间建立联系,只能使用指针记录堆内存的地址,以此来使用堆内存
空指针
空指针:值为NULL的指针变量叫做空指针,如果进行解引用就会产生段错误
NULL会作为错误标志的一种,当一个函数的返回值是指针类型时,函数如果执行出错返回值就是NULL
如何避免空指针带来的段错误:
使用来历不明的指针前先做判断
1、从函数中获取的指针返回值,可能是空指针
2、当函数的参数是指针,别人传给你的就可能是空指针
if(NULL == p)
if(!p)
注意:NULL在绝大多数系统中是0,个别系统是1
野指针
野指针:指向不确定的内存空间
解引用野指针的后果:
1、一切正常
2、脏数据
3、段错误
野指针比空指针的危害更严重&