typedef结构和指针

时间:2018-05-20 05:25:57

标签: c pointers typedef

当我们有:

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

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

1 个答案:

答案 0 :(得分:4)

定义

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?