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?
当我们有:
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?