第一段主函数里定义 BiTree p,然后将p传入:InThreading(p),就能在函数里改变p->lchild等变量,而第二段代码也是相同的定义,却改变不了n中data的数值,想了很久没有想清楚,泪求点通
//第一段代码
typedef struct BitNode
{
char data; //结点数据
struct BitNode *lchild; //左右孩子指针
struct BitNode *rchild;
PointerTag ltag; //左右标志
PointerTag rtag;
}BitNode, *BiTree;
//中序遍历进行中序线索化
void InThreading(BiTree p)
{
if(p)
{
InThreading(p->lchild); //递归左子树线索化
if(!p->lchild) //没有左孩子
{
p->ltag = Thread; //前驱线索
p->lchild = pre; //左孩子指针指向前驱,这里是第3步
}
if(!pre->rchild) //没有右孩子
{
pre->rtag = Thread; //后继线索
pre->rchild = p; //前驱右孩子指针指向后继(当前结点p)
}
pre = p;
InThreading(p->rchild); //递归右子树线索化
}
}
//第二段代码
typedef struct{
int data;
}*elemtype;
void f(elemtype n)
{
n->data=1;
}
void main()
{
elemtype n;
f(n);
printf("%d",n->data);
}
看了好久,都觉得第二段代码要报错,自己试了下gcc编译后运行,是会Segmentation fault的
elemtype是一个指向struct的指针,你没有alloc内存,这应该是一个野指针了,n->data应该是不允许执行操作的