关于参数“指针传递”,“指针引用传递”的区别
template <class T>void BinaryTree<T>::inOrder (BinTreeNode<T> *&subTree) //参数*&subTree{ if (subTree == NULL) return; else { inOrder (subTree->leftChild); cout<<subTree->data<<" "; inOrder (subTree->rightChild); }};void BinaryTree<T>::inOrder (BinTreeNode<T> *subTree) //参数*subTree{ if (subTree == NULL) return; else { inOrder (subTree->leftChild); cout<<subTree->data<<" "; inOrder (subTree->rightChild); }}; void allocMem1(unsigned char** buf) { *buf = new unsigned char[100]; memset(*buf, 0, 100); } void allocMem2(unsigned char *&buf) { buf = new unsigned char[100]; memset(buf, 0xff, 100); } int _tmain(int argc, _TCHAR* argv[]) { unsigned char *p1, *p2; allocMem1(&p1); allocMem2(p2); }
[解决办法]
第一个指针引用,即参数subTree和函数的输入时同一个东西
第二个是普通的参数,这里参数subTree和函数的输入是指向同一个位置,但是却是两个不一样的指针。
void AllocMemory1(char *&p)
{
p = new char[100];
}
void AllocMemory2(char *p)
{
p = new char[100];
}
void main()
{
char *p1 = null;
char *p2 = null;
AllocMemory1(p1);//指行完后p1指向了新申请的内存
AllocMemory2(p2);//指行完后p2还是null,而且造成了内存泄露
}
好好理解一下这个例子