typedef 结构和指针

typedef struct and pointer

当我们有:

      struct node{.....}
      typedef struct node Node;
      typedef Node *ptr;

ptr 是指向 struct node 的指针还是 typedef 改变了它的含义?

定义

typedef struct node *ptr;

将使 ptr 成为 struct node * 的别名。

之后你可以做任何一个

struct node *some_pointer;

ptr some_pointer;

两者都将变量 some_pointer 定义为指向 node 结构的指针。

但是 我不推荐使用指针类型的类型别名。它会使代码更难阅读、理解和维护。

以我在 Stack Overflow 上看到的关于指针类型别名的最常见问题为例:

ptr some_pointer = malloc(sizeof(ptr));

这会为结构的 指针 分配足够的内存,而不是为整个结构分配内存。如果使用例如

Node *some_pointer = malloc(sizeof(Node*));

那个错误会更清楚也更容易找到。

Is it a good idea to typedef pointers?