C++ 指针*与引用*&的区别

本文主要是面向C++初学者。

以下是我个人学习的过程中遇到问题后自己总结的经验。如果有什么理解偏差的地方,欢迎大家在下方留言,交流学习。

1.指针*

指针变量实际上存的是另一个变量的地址;

int a = 10;//变量a;
int *Addr_a ;//定义整型指针变量Addr_a;
Addr_a = &a;//将变量a的地址赋值给Addr_a;r_a;

 

2.引用*&

引用实际上是对变量的原内存地址的内容进行操作。

int a = 10;
int *addr_a;//定义整形指针变量;
addr_a = &a;
*(&addr_a) = 20//对变量a的内存重新进行赋值;引用

 

3.下面用个例子来比较指针与引用的深刻含义。

先附上例子的原代码。

#include 
#include 
#include 
#include 
#include 
using namespace std;

typedef struct LNode
{
	int val;
	struct LNode *next;
}LNode,*LNodeList;

void changeNode1(LNode*& pL)//引用
{
	pL = new LNode;
	pL->val = 10;
}

void changeNode2(LNode* pL)//指针
{
	
	pL = new LNode;
	pL->val = 10;
}

void Test1()//测试案例1

{
	LNode* L = new LNode;
	L->val = 5;
	changeNode1(L);
	cout << L->val << endl;
}

void Test2()//测试案例2
{
	LNode* L = new LNode;
	L->val = 5;
	changeNode2(L);
	cout << L->val << endl;
}
int main()
{
	Test1();
	Test2();
	return 0;
}

 

编译的结果如下:

C++ 指针*与引用*&的区别_第1张图片

下面我们将详细讲解这两个案例的区别。

案例1

void Test1()//案例1

{
	LNode* L = new LNode;
	L->val = 5;
	changeNode1(L);
	cout << L->val << endl;
}
void changeNode1(LNode*& pL)//引用
{
	pL = new LNode;
	pL->val = 10;
}

下面将代码的内存分配,赋值过程一一呈现给大家看。大家可以细细体会这些微妙的变化。

LNode* L = new LNode;

该句执行完后在堆内存空间新建一个指针结点,并赋予地址

L->val = 5;

该语句执行后,赋值L结点的数值为5;

changeNode1();

执行该句后跳转到changeNode1()函数体;

此时pL是L指针的别名,两个指针同指一个内存地址;

pL = new Node();

该句执行后,同样在内存空间为pL指针分配一个新的内存的空间,于是有了新的地址;

pL->val = 10;

执行后,给pL结点赋值;

changeNode1()函数体执行完后,同样指针L的内存地址更新为pL的内存地址,此时L的值为pL的值;

cout << L->val << endl;

打印输出L结点的值10,并换行。

 

案例2

void Test2()//案例2
{
	LNode* L = new LNode;
	L->val = 5;
	changeNode2(L);
	cout << L->val << endl;
}

void changeNode2(LNode* pL)
{

	pL = new LNode;
	pL->val = 10;
}

下面逐行代码分析。

LNode* L = new LNode;

在内存空间为L结点分配一定的内存空间;

L->val = 5;

给L结点赋值为5;

changeNode2(L);

执行该句后跳转到changeNode2()函数体;

将指针L的地址拷贝到指针pL指点;

pL = new LNode;

该句执行后,同样在内存空间为pL指针分配一个新的内存的空间,于是有了新的地址;

pL->val = 10;

给pL结点赋值为10;

changeNode2()函数体执行完后,回到主函数体;

cout << L->val << endl;

输出打印L结点的值5;

 

本文首发于CSDN网站,未经授权不得转载,转载需与我联系!

欢迎大家在评论区共同探讨。

——Handsome_Mr_Lin

你可能感兴趣的:(c++,数据结构,指针)