昨天晚上看到一个算法题:二叉搜索树与双向链表
有一个函数中的参数是二维指针,传递进去是一维指针的地址,我想:C语言中一维指针就可以改变指针所指向的值啊,为什么还要二维指针
算法中的函数声明:
void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeInlist);
大家先看一个小程序吧:
#include <iostream>
using namespace std;
int a = 5;
void fun(int* p)
{
p = &a;
}
void main()
{
int* p = NULL;
cout << p << endl;
fun(p);
cout << p << endl;
}
指针p的地址并没有改变
下面我们看看下面一个小程序:
#include <iostream>
using namespace std;
int a = 5;
void fun(int** p)
{
*p = &a;
}
void main()
{
int* p = NULL;
cout << p << endl;
fun(&p);
cout << p << endl;
cout << *p << endl;
}
我们发现p指向的地址改变了
总结:当一维指针是指向NULL的时候,在函数中得用二维指针去改变它的指向。