码迷,mamicode.com
首页 > 其他好文 > 详细

什么情况下使用指针的引用

时间:2020-05-04 17:21:59      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:解释   自己的   举例   ret   class   引用   main函数   names   思考   

指针作为参数

先明确一下指针的概念,指针存放的是变量的地址。
在函数调用时用指针做参数,表示把变量的地址传递给子函数。但是子函数只能修改指针所指的变量的值,并不能修改指针的指向。
如果想要修改指针的指向,就要用指针的引用(指针的指针也可以,但是这里只谈指针的引用)。

例子

先拿最简单的main函数里的变量来举例子

#include <iostream>
using namespace std;
int main() {
	int a = 4;
	int b = 3;
        
        //指针p存放a的地址
	int* p = &a;
        
        //再用指针s存放p中存放的东西
	int *s = p;

        //这时改变指针s,指针s存放b的地址
        //思考一下,取指p,输出的是什么?
	s = &b;
	cout << *p;

	return 0;
}

无疑取值p输出的结果是4,因为改变了指针s存放的变量地址,不会改变p存放的变量地址。
明确输出指针p和指针s改变前后存放的变量地址:
技术图片

#include <iostream>
using namespace std;
int main() {
	int a = 4;
	int b = 3;
        
	int* p = &a;
        
        //更改为指针的引用
	int* &s = p;

        //这时改变指针s,指针s存放b的地址
        //思考一下,取指p,输出的是什么?
	s = &b;
	cout << *p;

	return 0;
}

这里的取值p也是3,因为指针s是引用,是p的别名,改变指针s存放的东西,实际上也是改变指针p存放的东西。
技术图片

再深层一点解释,指针p和指针s都会有他自己的地址,结合例子1和2一起解释:
技术图片

说完基本的,再说函数中的指针引用参数

#include <iostream>
using namespace std;

//传指针
void test(int* num) {
	int a = 3;
	num = &a;
}

int main() {
        //指针s存放a的地址
	int a = 4;
	int* s = &a;
        
	test(s);
        
        //取值s输出是什么,思考一下
	cout << *s << endl;

	return 0;
}

结合开头说到的,函数传进去的是变量的地址,需要注意的是指针num和指针s不一样,只是存放的东西相同:
技术图片

如果想操作指针s的指向,那就得传指针的引用到函数中

#include <iostream>
using namespace std;

//传指针的引用
void test(int* &num) {
	int a = 3;
	num = &a;
}

int main() {
        //指针s存放a的地址
	int a = 4;
	int* s = &a;
        
	test(s);
        
        //取值s输出是什么,思考一下
	cout << *s << endl;

	return 0;
}

如果传指针的引用,取值s输出的是函数中改变后的值,3。
技术图片

什么情况下使用指针的引用

标签:解释   自己的   举例   ret   class   引用   main函数   names   思考   

原文地址:https://www.cnblogs.com/wasi-991017/p/12826967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!