|
发表于 2014-5-13 22:14:51
|
显示全部楼层
#include <stdio.h>
#include <stdlib.h>
typedef struct _tree
{
int data;
struct _tree * next;
}tree;
void InitTree1(tree *p) //这个应该没有疑问
{
p = (tree* )malloc(sizeof(tree)); //这里不需要强制类型转换。
//malloc(sizeof(T))返回T*型值,“=”左右两边类型一样,符合语法。
p->data = 0;
p->next = NULL;
return ;
}
void InitTree2(tree **p) //这说过了
{
(*p) = (tree*)malloc(sizeof(tree)); //p内记录的是tree*型变量的地址,对其取*,即*p指的
//就是tree* 变量,即指向tree型变量的指针。一句话(*p)相当于上边的InitTree1中的p。当然
//这里也不需要强制类型转换。
(*p)->data = 0;
(*p)->next = NULL;
return ;
}
int main()
{
tree p1, *p2; //p1为tree型变量,p2为指向tree型变量的指针。
InitTree1(&p1); //&p1 是取tree型变量的地址
InitTree2(&p2); //&p2 为取指向tree型变量的指针变量的地址,它的
//类型为tree *型 根据 T* = &T语法规定,这里T为tree*型。所以形参我要
//用一个tree** 型的指针来存这个值。
return 0;
}
//综上,两个初始化是等价的。关于二者优劣,因为单边二叉树这里我还没学习到,所以
//抱歉,但在这个程序我建议用第一种,如果程序有添加其他函数,需具体问题具体对待。 |
|