原文链接:http://www.jianshu.com/p/2062bf912a59
void* 类型指针:通用变体类型指针;可以不经转换,赋给其他指针,函数指针除外;malloc返回的就是void*类型。
NULL指针:是一个标准规定的宏定义;#define NULL ((void *) 0) 用来表示空指针常量;
零指针:指针值为0,零值指针,没有存储任何内存地址的指针;可以使任意一种指针类型,eg:void * ;int * ;double *;
空指针:指针赋值为0;0*7;3-3等之后,指针即变成空指针;即:空指针不指向任何实际的对象或者函数;NULL指针和零指针都是空指针。
野指针:指向垃圾内存的指针;(1)指针变量没有初始化(2)指针被delete或者free之后没有置为空(3)指针操作超越了变量的范围。【注:使用没有被初始化的指针(野指针)的结果是未定义的。】
在vc的debug模式下,对于未初始化的栈内存全部填成0xcc,对应于MBCS编码中汉字字符串看就是烫烫烫烫;对于未初始化的队内存全部填成0xcd,对应于汉子字符串看就是屯屯屯屯;release模式下直接就是内存中随机的数据。
原文没有提到悬垂指针Dangling pointer:悬垂指针指向曾经指向的对象所在的内存,但是该内存空间上的对象已经被销毁而不复存在,但是指针的值依然是原来的地址。
悬垂指针出现原因:对象被销毁了,内存被释放了,但是指针的值没有被重新赋值。