C++ 指针引用 *&

C++ 指针引用 *&文章目录指针引用的作用示例仅一级指针实现二级指针实现指针引用实现指针引用的作用指针引用*&可以替代二级指针**;使用时,更简单;可以被重新赋值。示例如下示例,要求在func(p)中,m_value值和参数p指代的实际内容值相同;且之后m_value值的改变,会影响p的实际内容;仅一级指针实现#include<iostream>…


指针引用的作用

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


示例

如下示例,要求在 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注