c++关于引用指针和指针作为参数调用的问题

c++ 关于引用指针的问题:(下面是代码)
在main函数中BiTree 只定义了T 而没有初始化。在createBITree中用指针传进来(BiTree T)会报错,没有初始化。 但是用引用传进来(BiTree &T
)就不会报错。这到底是为什么? 而且就算我在main中初始化了BiTree T = new BiTreeNode; 运行结果也不正确。想知道为什么。


typedef struct node
{
    struct node *lchild;
    struct node *rchild;
    char data;

}BiTreeNode, *BiTree; 

void createBiTree(BiTree T)
{
    char c;
    cin >> c;
    if ('#' == c)             //当遇到#时,令树的根节点为NULL,从而结束该分支的递归
        T = NULL;
    else
    {
        T = new BiTreeNode;
        T->data = c;
        createBiTree(T->lchild);
        createBiTree(T->rchild);
    }
}

void preTraverse(BiTree T)
{
    if (T)
    {
        cout << T->data << " ";
        preTraverse(T->lchild);
        preTraverse(T->rchild);
    }
}

int main()
{
    BiTree T ; 
    createBiTree(T);
    cout << "前序遍历二叉树:" << endl;
    preTraverse(T);
    postTraverse(T);
    return 0;
}

传引用,形参就是实参。
就直接对T操作。
传指针,实参T未被修改。
此时你得传递实参的指针或者引用,才能修改实参,
createBiTree(BitTree *)
调用时
BiTree *T ;
createBiTree(T);
才能把T的值从函数中传出来