C++中二级指针(指针引用)解释总结

今日在看视频学东西时,大量用到二级指针,于是便查阅资料对指针进行了研究总结。

1. 为什么会用到指针(或引用)?

在一个函数的执行中,局部变量发生的变换不会作用在函数外(且值传递浪费内存)。因此便用到了指针(或引用)来通过地址传递从而使函数的执行结果对全局都有影响。

2. 为什么会用到二级指针(或指针引用)?

a、例如一个通讯录系统,一个大的系统里面,有多个对象需要修改,而每个对象里面又有多个值需要修改,因此这里便需要通过多层指针来嵌套。即多维数组中的参数传递(此处的系统下的对象便为二级指针)。
b、对指针进行操作(修改、释放内存空间等)对于一个正常的指针变量(等同于系统中每个对象里面的属性),你可以在函数体中对其指向的值进行修改,如下图:C++中二级指针(指针引用)解释总结_第1张图片
但若你想修改p指向的地址来修改其中的值(也就是说,把指针当成变量,修改指针)(系统中的每个对象),如下图
C++中二级指针(指针引用)解释总结_第2张图片

可以发现,值并没有发生改变。

因此,为了改变p指向的地址,此处引入二级指针。

3. 如何使用二级指针

void change(int** pp)
{
	int* c = new int(20);
	*pp = c;//这里的**pp指向p指针指向的内容而*pp指向p指针
}	

int main() 
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	change(pp);
	cout << "a=" << a << endl;
	cout << "p=" << p << endl;
	cout << "&a=" << &a << endl;
	cout << "*p=" << *p << endl;
	cout << "**p=" << **pp << endl;
	system("pause");
	return 0;
}

其结果如下C++中二级指针(指针引用)解释总结_第3张图片
可知,在二级指针下,将p的内容改成了int(20)的地址,从而p在解引用时,其值变为了20。

4.如何使用指针引用

cpp中提供了相比二级指针更好的概念——指针引用,可以通过指针引用来不那么绕地模拟二级指针,对一级指针的内容进行修改,其修改如下:

void change(int* &pp)
{
	  pp = new int(20);
	
}	
int main() 
{
	int a = 10;
	int* p = &a;
	change(p);
	cout << "a=" << a << endl;
	cout << "p=" << p << endl;
	cout << "&a=" << &a << endl;
	cout << "*p=" << *p << endl;
	system("pause");
	return 0;
}

本代码中,即将p取个别名pp,对pp的修改就是对指针p的修改,既可以修改其p的地址也可修改其p指向的内容。其结果与上文一样。
C++中二级指针(指针引用)解释总结_第4张图片

5.总结

a、指针就是地址,而*符号在地址的左边便是获得地址对应的值。
b、引用就是给变量起别名,但其内部的本质是指针常量(即地址不变,内容可变)。而指针引用的定义格式为int* &p,其中int*是数据类型,&是引用要求,p是别名。
c、在上述的代码中,无论是用指针引用还是二级指针的方法,一旦对p进行修改,会导致pa脱钩,此时若再出现一个函数使*p=40,那么a也仍为10。

你可能感兴趣的:(cpp,c++,开发语言,c语言)