对引用和指针理解的一点误区

今天因为这个,看二叉搜索树的插入操作一直没看懂。
仔细想想,其实不是不理解引用,而是不理解内存。
一个指针变量,即使它的值为空,它也不是不存在的,它还存在,它仍然占用内存的一块区域的。
同样的,一个结构体的指针类型的成员,即使它的值为null是,它也是存在的,它仍然占用内存的一块区域,只不过这块区域的内容全是0而已。
所以,对于链表结点来说,若要修改它成员变量中的指针域的指向,不一定非要通过指向这个结点的指针来修改。
可以直接通过指向这个指针域的指针(或引用)来修改。
具体例子
1->2->3->null
若要删除2,让1指向3,1->3。
具体做的是 让1.next指向3, 然后释放2的空间。
其中让 1.next指向3时,
其实不用非要知道1的地址,只要有(1.next)的引用或地址就可以做到直接让1.next指向3.

这只是奇技淫巧吗?也许不是。有时候真的能让代码变的很简洁。比如说更新二叉树结点的指向,如果你通过指向这个结点的指针来完成的话,必须还得记录更新的是左孩子还是右孩子。而用节点的指针域的引用就方便多了,更新哪那个指针域,只需记下指针域的引用就好了。至于是左孩子还是右孩子,引用本身就包含了,不用自己再去操心额外判断了。

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/104545588
今日推荐