如何使用#define创建树

时间:2011-07-13 07:18:31

标签: c

我想创建一棵树。我看到了以下代码

#define NODEALLOC(struct treenode*)malloc(sizeof(struct treenode))

    struct treenode{

          int data;
         struct treenode * left;
         strruct treenode *right;

   }
typedef struct treenode *treeptr;
treeptr root;

treeptr create(int d)
 {

treeptr root;
root =NODEALLOC;
root->data=d;
root->left=null;
root->right=null;
 return root;
}

我不理解#define声明。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

不要使用它。如果您不想多次写malloc,请使用函数。使用这样的宏是你应该更好地避免的(这是合法的,但不被认为是一种好的做法)。

如果你不知道首先是什么宏,read

答案 1 :(得分:1)

首先,这是错误的,它需要NODEALLOC(之间的空格

其次,它是邪恶的。 对宏的良好用途;这不是其中之一。

以下是它的工作原理:

这是一个简单的字符串替换,因此当您看到root=NODEALLOC;时,它变为root=(struct treenode*)malloc(sizeof(struct treenode))

malloc(n)分配n个字节的内存,sizeof告诉malloc需要多大n(struct treenode*)将malloc的返回void*转换为正确的类型

答案 2 :(得分:0)

这很简单。将代码中的NODEALLOC替换为其定义。在你的情况下:

treeptr create(int d)
{
  treeptr root;
  root = (struct treenode*)malloc(sizeof(struct treenode)); // was NODEALLOC;
  root->data=d;
  root->left=null;
  root->right=null;
  return root;
}

因此,这是一个简单的分配。

但是,仅为此使用宏并没有多大帮助,它甚至会让读者感到困惑。通常,宏应该做一些有用的事情。