C 为什么使用typedef中的指针?

C 为什么使用typedef中的指针?,c,C,看到这个结构了吗 typedef struct Node{ void *data; int pos; struct Node *prev; struct Node *next; }*lptr; 我想知道为什么节点的typedef是*lptr而不是lptr。 指针有什么区别?类型定义用于指针类型 lptr是类型struct Node*类型def是指针类型 lptr是类型struct节点*,尽管通常有两个typedefs-一个用于struct以避免标记,另一个用于s

看到这个结构了吗

typedef struct Node{
    void *data;
    int pos;
    struct Node *prev;
    struct Node *next;
}*lptr;
我想知道为什么
节点的typedef是
*lptr
而不是
lptr

指针有什么区别?

类型定义用于指针类型


lptr
是类型
struct Node*

类型def是指针类型


lptr
是类型
struct节点*

,尽管通常有两个
typedef
s-一个用于
struct
以避免标记,另一个用于
struct
指针以避免星号,如下所示

typedef struct Node{
    void *data;
    int pos;
    struct Node *prev;
    struct Node *next;
} Node;
typedef Node* lptr;

如果作者希望避免在
lptr
Node
后写星号,他们当然可以
typedef
指向
struct节点的指针

,尽管通常有两个
typedef
s-一个用于
struct
以避免标记,一个用于
struct
指针以避免星号,如下所示

typedef struct Node{
    void *data;
    int pos;
    struct Node *prev;
    struct Node *next;
} Node;
typedef Node* lptr;

如果作者希望避免在
lptr
Node
后写星号,他们当然可以
typedef
指向
struct节点的指针,因为定义(typedef)是指向指针类型的。删除它将使lptr成为Node类型,*将使其成为指向节点的指针。

因为定义(typedef)是指向指针类型。删除它将使lptr成为Node类型,*将使其成为指向节点的指针。

IMHO,使用typedefs隐藏指针不是一个好做法。您不能查看声明并确定它是指针还是结构;您必须始终返回typedef。如果你从不在typedefs中隐藏指针,你就不会有这个问题。有人同意吗?大多数程序员都同意在typedef中隐藏指针是一种糟糕而危险的做法。然而,问题是为什么typedef中有一个指针,而不是它是否是良好的实践。这是一个完全正确的问题,没有理由投反对票。@Lundin,我没有投反对票,只是作为评论表达了我的意见。:-)依我看,用typedefs隐藏指针不是一个好的做法。您不能查看声明并确定它是指针还是结构;您必须始终返回typedef。如果你从不在typedefs中隐藏指针,你就不会有这个问题。有人同意吗?大多数程序员都同意在typedef中隐藏指针是一种糟糕而危险的做法。然而,问题是为什么typedef中有一个指针,而不是它是否是良好的实践。这是一个完全正确的问题,没有理由投反对票。@Lundin,我没有投反对票,只是作为评论表达了我的意见。:-)