指针引用的作用
指针引用 *& 可以 替代 二级指针 ;
使用时,更简单;
可以被重新赋值。
示例
仅一级指针实现
#include
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
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
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://javaforall.net/203750.html原文链接:https://javaforall.net
