总感觉只要把指针作为参数,就可以达到我们需要的效果。举一个例子,我通过“bool Delete(BSTree p)”这个函数来删除结点*p(注:BSTree是BSTNode*指针变量),但是每次都是提示内存溢出的问题,弄的好郁闷,后来仔细想了想,好像想出来了一些东西。
先说一下上面说的这个函数,如果我们传递过来一个指向一个结构体(二叉树)的指针,它占有一片内存(设为A),但在函数中,这个指针又指向了另一块内存(设为B)。于是,在函数实现中,这个指针(的确是指向原来内存A的那个指针)又指向内存B,于是,对B进行一系列操作,虽然进行了删除操作,但是那都是对内存B的操作,我们的内存A并没有发生任何变化,于是,没有达到我们需要的效果。
但是,倘若我们使用引用就不一样了。因为引用的时候,我们形参的那个指针变量其实就是我们传递过来的指针变量(只是一个别名,它们两个指针又共同的存储地址,当然指向相同的内存空间了,于是呢,我们在函数中的任何操作都可以反映到内存A的操作,于是可以达到我们的目的。
如果我们想“只”通过指针达到我们的目的的话,也就是说修改实参的内容,那我们在函数中必须通过*p来修改我们要修改的内容。但是,如果我们仅仅是通过修改指针的位置达到我们目的的话(例如上面通过修改指针的位置释放某一块儿内存),这样是没法达到的。于是呢,我们只用通过传递指针的时候,再加上引用,使用指针变量的引用,这样呢,我们在函数实现中的指针就是实参的指针(是实参指针的一个同名变量,也就是一个别名!),这样,我们的修改,也就达到了我们的作用!