一个关于指针关的问题
首先是二叉树:
typedef struct node
{
int key;
struct node *lchild,*rchild;
}Pnode,*BTree;
void CreatTree(BTree &T,int n)
调用这个函数的时候是
BTree T;
CreatTree(T,10);
接着是栈的
typedef struct node
{
int data;
struct node *next;
}pNode,*NODE;
typedef struct
{
NODE top,bot;
}stack,*Linkstack;
void CreatStack(Linkstack &s)
调用这个函数的时候是
Linkstack s;
CreatStack(s)
上面两个是我二叉树和栈的代码里截取出来的片段,
然后我发现,二叉树那样定义和调用是没问题的,
但是到栈那就不行了,运行的时候直接弹出个错误框,栈那里要改成
void CreatStack(Linkstack s)
stack s;
CreatStack(&s);
这样才不会出错,这样改我知道是没问题的,但是不明白的有两个
1.二叉树那里定义成 BTree &,直接把实参传进去却可以改变实参的值,
而学指针的时候,实参把地址传给指针形参,这样就能改变实参的值了,但
现在这样定义反而有种反过来的感觉,但也可以,这两种有什么区别?
2.既然二叉树那样定义成功,为什么栈那样定义却运行不到?
求大神教下小弟我
[解决办法]
1.BTree &T叫做引用,可以理解成把实参直接传递到函数中了,没有拷贝副本
2.没看出什么问题,CreateStack内部的问题吧