int *pa(指针)和int *&pa(指针的引用)的区别

funa(int * pa);

funb(int*& pb);

两参数的数据交换的情况:

funone(int *pa,int *pb):
#include
using namespace std;
void funone(int *pa,int *pb)
{//单传递,只在函数里面实现了交换指针指向的地址值。
	//执行函数之后,外部的两个指针指向的地址值不受函数内部的影响。
	cout << "进入funone函数里面:" << endl;
	cout << "pa:"<
打印结果:

int *pa(指针)和int *&pa(指针的引用)的区别_第1张图片

funone(int *&pa,int *&pb)
#include
using namespace std;
void funone(int *&pa,int *&pb)
{//可以说实现了双向传递,内部和外部的两个指针都影响。
	cout << "进入funone函数里面:" << endl;
	cout << "pa:"<
打印结果:

int *pa(指针)和int *&pa(指针的引用)的区别_第2张图片
一个参数传递的情况:
#include
using namespace std;
int m_fun = 1;

void funa(int *pa)
{
	cout << "在funa函数里面:" << endl;
	cout << "*pa的值" <<*pa<< endl;
	pa= &m_fun;
	*pa = 10;
//如果不添加pb=new int,这里的pa地址是m_fun的地址,可以显示*pa的值为10。
	pa = new int;
	cout << "进行运算之后:"<
打印结果:
int *pa(指针)和int *&pa(指针的引用)的区别_第3张图片
补充funone(int *pa,int *pb)函数知识:
我这里设置函数为funtwo(int *pa,int*pb):

#include
using namespace std;
void funtwo(int *pa,int *pb)
{//可以说实现了双向传递,内部和外部的两个指针都影响。
int temp = *pa;
*pa = *pb;
*pb = temp;
}
int main()
{
int a = 100;
int b =200;
int *pa = &a;
int *pb = &b;
cout << "执行funone(pa,pb)之前:"<
打印结果:

int *pa(指针)和int *&pa(指针的引用)的区别_第4张图片
好了,有了补充的知识,再结合以上的实验,总结了下:
int *pa(指针)和int *&pa(指针的引用)的区别:
指针的引用:
1.双向传递。
2.可以说是 指针的指针,*&指针本身可变。
例如:pa=new int,可以把新分配的地址赋值给pa本身,保持指向变量(m_fun)的内容不变。
指针:
1.可以单向传递,也可以双向传递。
单向传递:在函数内交换指向变量的地址,只对函数内部的指针有影响。
双向传递:在函数内交换指向变量的内容,对函数内部和外面的指针都有影响。
2.指针指向的数据是改变,而指针本身是不改变的。
例如:pa=new int,不能把新分配的地址赋值给pa本身,否则赋值之后,之前的指向变量(m_fun)的内容变成其他无效值。

你可能感兴趣的:(c++,指针,指针的引用)