C语言中的结构指针

use*_*878 2 c pointers data-structures

这段代码中的错误是什么?为什么我不能按照我尝试的方式取消引用元素.

#include<stdio.h>
typedef struct
{
    int value;
    struct node * left;
    struct node * right;
} node;

int main() {
    node* root,*temp;
    root = (node*) malloc(sizeof(node));
    root->value = 10;
    (root->left)= (node*) malloc(sizeof(node));
    (root->right)=(node*) malloc(sizeof(node));
    ((root->left)->value) =20;   // WHY AN ERROR HERE???
}   
Run Code Online (Sandbox Code Playgroud)

jop*_*rat 11

您的结构定义错过了您进一步重用的类型名称.声明左侧和右侧字段时,编译器不知道结构节点是什么.您需要声明您的结构是一个节点.这意味着要更改typedef别名.看下面的修正,这个编译很好:

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
        int value;
        struct node * left;
        struct node * right;
} Node;

int main() {
        Node* root,*temp;
        root = (Node*) malloc(sizeof(Node));
        root->value = 10;
        (root->left)= (Node*) malloc(sizeof(Node));
        (root->right)=(Node*) malloc(sizeof(Node));
        ((root->left)->value) =20;   /* no more errors */

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • @ user420878请确保您使用的是此代码.用gcc 4.3.2编译好.请注意,jHackTheRipper将您的类型名称从节点更改为Node.相反,您可能希望用struct node_its_a_struct替换struct node (2认同)