我在这里遇到了一些问题.我已创建一个结构和功能,试图了解该树数据结构works.Now的问题是,当我尝试编译命令下面的代码gcc test.c -o test,编译器总是返回错误信息error? expected ‘;’, ‘,’ or ‘)’ before ‘&’ token,请给我一些帮助.
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
int data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void createTree(BiTree &T)
{
int i;
scanf("%d", &i);
if(i == -1)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = i;
createTree(T->lchild);
createTree(T->rchild);
}
}
int main(void)
{
BiTNode* root = NULL;
createTree(root);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正确的签名是:
void createTree(BiTree T)
Run Code Online (Sandbox Code Playgroud)
并不是:
void createTree(BiTree &T)
Run Code Online (Sandbox Code Playgroud)
事实上,你不能在C函数签名中使用&.你这样做的方式在C++中是有效的,它支持引用.C不这样做.
但是,您可以createTree(BiTNode* T)在签名中使用指针(例如),但在您的情况下不需要它,因为您已经指定BiTree是指向BiTNode的指针.
重要更新:此更改将使您的函数编译,但为了使其工作,您还需要确保您可以实际使用在该函数内创建的指针.有两种方法可以做到这一点:
1)返回新指针作为结果:
BiTree createTree()
{
BiTree T;
int i;
scanf("%d", &i);
if(i == -1)
{
T = NULL;
}
else
{
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = i;
T->lchild = createTree();
T->rchild = createTree();
}
return T;
}
int main(void)
{
BiTNode* root = NULL;
root = createTree();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2)将指向BiTree的指针作为函数参数(也许这就是你对引用的意义).
void createTree(BiTree *T)
{
int i;
scanf("%d", &i);
if(i == -1)
{
*T = NULL;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode));
(*T)->data = i;
createTree(&(*T)->lchild);
createTree(&(*T)->rchild);
}
}
int main(void)
{
BiTNode* root = NULL;
createTree(&root);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |