版权声明:本文为匆忙拥挤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
满足要求。