指针和引用作为参数的不同(一)

指针作为函数参数,本质还是传值

这个问题其实很常见 对指针进行修改

总的来说,在以下情况下你应该使用指针:

一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),
二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。
如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
———————摘自《More_effective C++》

先贴一下代码,这里只贴了一部分

在二叉树相关的编程中,对leftchild 或者rightchild的指向进行修改是很常见的,今天遇到了一个小坑

class Rbtree
{
public:
	Node* m_root;
	void insert(int key,Node * root);
}

void Rbtree::insert(int key,Node * root)
{
	if (root == nullptr)
	{
		root = new Node(key);
		return;
	}

}

会有什么问题呢,在insert后,m_root 仍然为空这是为什么呢?

Rbtree  test1;
test1.insert(5, test1.m_root);

举个例子

int c;
int d;
int *a=&c;
swap (a, b)

a指针指向整型 c

a指针的值是c变量的地址。

你可以通过a指针修改b的值。但是你要想让a指针指向d,你就得修改a指针的值。

但是指针作为参数传到函数的时候,是不能修改原来的值的

那么这个时候,就应该传的是a指针的引用

所以,上面那段代码

应该改成

void insert(int key,Node * &root);

这样才能对root的指向进行修改

总结一下, 对指针指向的东西的修改, 和对指针本身的修改是不同的

如果要对指针的指向进行修改,就要用指向指针本身的指针进行修改 或者 用指针本身的引用 修改

原文地址:https://www.cnblogs.com/yahoo17/p/12327311.html