跳到主要内容

函数参数的结构体指针返回值问题

typedef struct BinaryTreeNode {
int data;
struct BinaryTreeNode *left;
struct BinaryTreeNode *right;
}BTNode;

BTNode* CreateBTNode(BTNode *Tree) {
char c;
scanf("%c", &c);
if (c=='#') {
Tree=NULL;
}
else {
Tree=(BTNode *)malloc(sizeof(BTNode));
Tree->data=c;
Tree->left = CreateBTNode(Tree->left);
Tree->right = CreateBTNode(Tree->right);
}
return Tree;
}

今天终于理解了为什么需要返回值。一个递归前序创建二叉树的示例如上。

主函数中BTNode *p;创建一个新结构体,会给一个int和两个空指针开辟内存空间。此时指针为空。调用函数CreateBTNode()时,初始化了一个局部函数体指针变量BTNode *Tree,将p的空地址传给了这个局部指针变量,然后malloc给这个局部指针变量开辟空间,此时函数如果没有返回赋值的话就不能将新地址传回原指针p。所以要返回值。

参考资料: