typedef struct Tree *tree; struct Tree{ int node; tree leftTree; tree rightTree; }; void initial(tree a){ a = (Tree*)malloc(sizeof(Tree)); a->leftTree = NULL; a->rightTree = NULL; }
// 为什么函数带一个返回值就对了,操作的是指针,不返回不也就可以吗
tree initial(tree a){
a = (Tree*)malloc(sizeof(Tree));
a->leftTree = NULL;
a->rightTree = NULL;
return a;
}
initial()函数为什么是错的,函数的形参不是一个指针吗
应该这样写:
void initial(tree *a)
{ a = (Tree*)malloc(sizeof(Tree));
a->leftTree = NULL;
a->rightTree = NULL;
}
tree 已经是一个指针类型了啊
@ithan:
typedef struct treeNode{ int node; struct treeNode *leftTree; struct treeNode *rightTree; } treeNode,*tree;
这样定义
@千紫小星:
#include <stdio.h> typedef struct treeNode{ int node; struct treeNode *leftTree; struct treeNode *rightTree; } treeNode,*tree; void initial(tree a){ a = (treeNode *)malloc(sizeof(treeNode)); a->leftTree = NULL; a->rightTree = NULL; } int main(void) { tree a; initial(a); printf("Hello World!\n"); return 0; }
这样来写
@千紫小星:
#include <stdio.h> #include <stdlib.h> typedef struct treeNode{ int node; struct treeNode *leftTree; struct treeNode *rightTree; } treeNode,*tree; void initial(tree a){ a = (treeNode *)malloc(sizeof(treeNode)); a->leftTree = NULL; a->rightTree = NULL; } int main(void) { tree a; initial(a); //访问左儿子会出问题 initial(a->leftTree); a->leftTree->node = 5; printf("%d\n", a->leftTree->node); printf("Hello World!\n"); return 0; }
如果访问左儿子就会出问题,如果像这样写就不会出问题,给initial()函数一个返回值
#include <stdio.h> #include <stdlib.h> typedef struct treeNode{ int node; struct treeNode *leftTree; struct treeNode *rightTree; } treeNode,*tree; tree initial(){ tree a; a = (treeNode *)malloc(sizeof(treeNode)); a->leftTree = NULL; a->rightTree = NULL; return a; } int main(void) { tree a; a = initial(); a->leftTree = initial(); a->leftTree->node = 5; printf("%d\n", a->leftTree->node); printf("Hello World!\n"); return 0; }
@ithan: 这牵涉到指针变量和指针的区别,指针变量和普通的数据变量一样,在你出错的程序那里,你往函数里传递的是指针变量,这样就产生了函数传递过程中,实参和形参的问题,子函数里面的形参的指针变量的数值改变了,但是主函数里的没有改变。而你正确的那个程序,因为使用了返回值,和普通的一样。
@ithan: 再看看这个图:
@ithan: 指针变量就是普通的变量,而指针(地址)是一个变量的地址,指针变量也是有地址的。这东西确实不好理解。
@千紫小星: 这下终于懂了!太感动了