指针作为函数参数,本质还是传值
这个问题其实很常见 对指针进行修改
总的来说,在以下情况下你应该使用指针:
一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),
二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。
如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
———————摘自《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的指向进行修改
总结一下, 对指针指向的东西的修改, 和对指针本身的修改是不同的
如果要对指针的指向进行修改,就要用指向指针本身的指针进行修改 或者 用指针本身的引用 修改