理解指针
(1)指针的类型
(2)指针指向的类型
(3)指针的值
(4)指针本身所占的内存区
指针的类型必须与其所指的对象的类型一致, 但是有两个例外:
1. 指向常量的指针可以指向一个非常量的对象。
2.
指针的值
1:指向一个变量
2:指向紧临变量所占空间的下一个位置。
3:空指针,意味着指针没有指向任何对象。
4:无效指针,也是上述情况之外的其他值
空指针
空指针不指向任何对象,以下是生成空指针的方法:
int* p1 = nullptr; //nullptr是一种特殊类型的字面值,他可以被转换成任意其他指针类型
int* p2 = 0;
int* p3 = NULL://NULL是一个预处理变量,它被存放在cstdlib头文件中,它的值就是0
void * 指针
void * 是一个特殊的指针,可用于存放任何对象的地址。它和其他指针是一样的,只是我们不知道改地址到底是一个什么类型的变量。
double obj = 3.14, *pd =& obj;
void * pv = &obj; //pv可以存放任意类型的变量,
pv = pd; //pv可以存放任意类型的指针
指向指针的引用
我们知道引用本身不是一个对象,因此不能够定义指向引用的指针,但是指针是对象,所以可以定义指向指针的引用。
#include<iostream>
using namespace std;
int main()
{
int i = 42;
int* p = nullptr;
int*& r = p; //r是一个对指针p的引用
r = &i; //给r赋值,其实就是给p赋值
*r = 0; //解引用r得到i,也就是p指向的对象。
cout << "通过r改变i的值:i=" << i << endl;
*p = 10;
cout << "通过p改变i的值:i=" << i << endl;
system("pause");
return 0;
}
注意: 面对一条复杂的指针或者引用声明语句时, 从右向左阅读。