指针:特定类型数据在内存中的存储地址,即内存地址
其载体为:指针变量(用于记录地址)
64位系统中指针变量占用8字节(byte),32位系统占用4字节
int num =10;
int * p; // 声明一个指针变量
p = & num ; //取到num的地址,给指针赋值
cout << p ; //输出的Num的地址
cout << * p ; //输出的num 的值
注意:指针变量的类型取决于所存放的地址指向的数据类型,此处为int
*号有两个含义:
声明时*p表示p是一个指针变量
使用时*p表示取出指针p执行内存区域的数据
* p = 20 ; //等同于num = 20 ;
野指针:被声明了但是未被初始化(未被赋值)的指针。该指针会被指向随机的内存空间,导致未知的问题
若声明了一个野指针:int * p ; (未赋值)
则该指针会指向位置的随机的4字节区域(4字节是因为定义p为指向的int数据)
如果此时随机指向的内存空间中存在上个程序遗留下来的脏数据、或价值数据
若此时再随意更改数据如:*p = 10:
则会引起系统紊乱或者软件紊乱的可能性
空指针:
为了避免野指针,应该对声明的指针及时的初始化,置为空指针
int * p = NULL; //NULL是C++的内置宏,本质是0
int * p = Nullptr;
空指针是一种垃圾代码作为过渡使用,应尽快使用
空指针和野指针都会编译错误。但是相对于野指针,空指针不会带来安全隐患。