C++ 指针引用 *&

版权声明:本文为匆忙拥挤repeat(stone)原创文章,转载请注明出处 —— http://blog.csdn.net/jjwwmlp456 https://blog.csdn.net/jjwwmlp456/article/details/89286187


指针引用的作用

指针引用 *& 可以 替代 二级指针 **
使用时,更简单;
可以被重新赋值。


示例

如下示例,要求在 func( p)中,m_value值和 参数 p 指代的实际内容值相同;
且之后 m_value值的改变,会影响 p 的实际内容;

仅一级指针实现

#include <iostream>
using namespace std;

int m_value = 1;

//一级指针参数
void func(int * p,  int dest)
{
	m_value = dest;
	*p = m_value;
}

int main(int argc, char *argv[]) {	
	int n = 2;
	int *pn = &n;
	cout << *pn << endl; //初始值
	
	func(pn, 77);
	cout << *pn <<endl; //经过 func 函数后

	m_value = 88;
	cout << *pn <<endl; //改变 m_value 后
}

程序输入:

2
77
77

发现 后面改变了 m_value 值 ,并不影响 *pn。 这不合要求

二级指针实现

#include <iostream>
using namespace std;

int m_value = 1;

//二级指针参数
void func(int ** p, int dest)
{
	m_value = dest;
	*p = &m_value; //*p 表示一级指针 ,指向 m_value 内容的地址
}

int main(int argc, char *argv[]) {
	int n = 2;
	int *pn = &n;
	cout << *pn << endl; //初始值
	
	func(&pn, 77); //pn 是指针变量, &pn 就是二级指针
	cout << *pn <<endl; //经过 func 函数后
	
	m_value = 88;
	cout << *pn <<endl; //改变 m_value 后
}

输出:

2
77
88

满足要求。

指针引用实现

#include <iostream>
using namespace std;

int m_value = 1;

//指针引用参数
void func(int *& p, int dest)
{
	m_value = dest;
	p = &m_value;
}

int main(int argc, char *argv[]) {
	int n = 2;
	int *pn = &n;
	cout << *pn << endl; //初始值
	
	func(pn, 77); //传递一级指针就以
	cout << *pn <<endl; //经过 func 函数后
	
	m_value = 88;
	cout << *pn <<endl; //改变 m_value 后
}

输出:

2
77
88

满足要求。

猜你喜欢

转载自blog.csdn.net/jjwwmlp456/article/details/89286187
今日推荐