当我们有:
struct node{.....}
typedef struct node Node;
typedef Node *ptr;
是ptr指向struct node的指针还是typedef改变了它的含义?
答案 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*));
该错误会更清晰,更容易找到。