指针引用的作用
指针引用 *&
可以 替代 二级指针 **
;
使用时,更简单;
可以被重新赋值。
示例
如下示例,要求在 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
满足要求。
一级指针改变地址(2020.01.30)
void func(const int *p, int dest)
{
m_value = dest;
p = &m_value; //直接对一级指针变量p 赋值一个地址。
}
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
2
2
从结果看,直接改变形参一级指针地址,并不影响实参一级指针。 仅在形参所在函数内部有效。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13370.html