1

我在这行代码的作用下遇到了麻烦:

struct node* node = (struct node*)

在这种情况下使用代码:

typedef struct node node;

struct node* newNode(int key)
{
    struct node* node = (struct node*)
    malloc(sizeof(struct node));
    node->key   = key;
    node->left   = NULL;
    node->right  = NULL;
    node->height = 1;  // new node is initially added at leaf
    return(node);
}

为什么指针放在标识符之后?

4

3 回答 3

1

这不是整行 - 表达式在下一行继续,直到分号:

struct node* node = (struct node*)malloc(sizeof(struct node));

这是带有强制转换的正常动态分配,这在 C 中是完全没有必要的。该行应如下所示:

struct node* node = malloc(sizeof(struct node));
于 2013-10-20T02:48:17.370 回答
1

所以,这很棘手

struct node* node = (struct node*)
malloc(sizeof(struct node));

可以改写为

struct node* node = (struct node*) malloc(sizeof(struct node));

它只是一个类型转换。

但是,在 C 中,不需要显式转换 from void*(return type of malloc),反之亦然,这与 C++ 不同。编译器完成这项工作。

于 2013-10-20T02:48:28.780 回答
0

您将代码包装到下一行。

struct node* node = (struct node*) malloc(sizeof(struct node));
于 2013-10-20T02:48:14.403 回答