C中的typedef混淆

wan*_*eek 2 c struct typedef

我很难理解这个C结构中的typedef.

typedef struct node {
   int   value;
   list  rest;
} node;

typedef struct node *list;
Run Code Online (Sandbox Code Playgroud)

"node"typedef声明和"list"声明之间有什么区别?为什么列表前面是指针?"节点"也不是指针吗?为什么我不能简单地说"typedef struct node list"并省略星号?我到处搜寻,我找不到满意的答案.

Mat*_*lia 5

第一个typedef定义node为别名struct node,允许您简单地引用它node而不是struct node每次都写入(C"常规"类型名称和struct名称存在于两个不同的名称空间中).它相当于:

struct node
{
    int value;
    struct node* rest;
};

typedef struct node     node;
Run Code Online (Sandbox Code Playgroud)

typedef相反,第二个定义list为别名node *,即将类型定义list指向node结构的指针.

(顺便说一下,我个人发现这是非常糟糕的风格:在typedefs中隐藏指针几乎总是一个坏主意;可以争辩说,列表中第一个元素的指针可以被识别为列表,但是使用list即使对rest指针是恕我直言不是很好)