首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于参数“指针传递”,“指针引用传递”的区别,该如何解决

2012-03-11 
关于参数“指针传递”,“指针引用传递”的区别C/C++ codetemplate class Tvoid BinaryTreeT::inOrder (Bin

关于参数“指针传递”,“指针引用传递”的区别

C/C++ code
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);     }};


使用两种的参数传递方式为什么不影响结果。第一种参数传递的意义是什么。

[解决办法]
单独指针只是传递的指针的值,指针形参的变化与调用的实参无关,只有用指针的引用才能将函数体内的初始化值传递回去上面的程序,说白了还是指针,只不过是二级指针,看以下例子:
C/C++ code
    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,而且造成了内存泄露
}

好好理解一下这个例子

热点排行