关于typedef struct指针的C语法,需要解释

时间:2015-01-08 05:30:04

标签: c pointers syntax struct typedef

typedef struct person *person_t;

在这种情况下,究竟是什么person_t?它是指向人或人的指针吗? 在C ++中,如果我要向对象声明一个ptr,我会这样做:

person* p;

在这种情况下,这是否意味着我可以写:

person_t p?

感谢。

3 个答案:

答案 0 :(得分:2)

person_tstruct person *

所以你可以拥有

person_t p;

当你这样做时

typedef struct person *person_t;
person_t p;

p是指向结构struct person

的指针

否则,如果你有

typedef struct person person_t;

然后

person_t *p;

将为您提供指向p

结构的指针

PS: 我总是选择后者,我觉得它更具可读性和不那么令人困惑。 (纯IMO)

答案 1 :(得分:0)

它就像指向结构的指针。

 struct person *p; // is equivalent to person_t p;

因为你也在输入指针。

 person_t p; // it  will act like a pointer to  structure.

您可以参考此link.

答案 2 :(得分:0)

此声明

typedef struct person *person_t;

为类型person_t引入了别名struct person *。因此,您可以互换使用person_tstruct person *。例如,这两个声明是等效的

struct person *p1;
person_t *p2;

问题是使用标识符person_t表示类型struct person *的指针不是一个好的选择。代码的读者可以认为person_t是结构人本身的别名。例如,声明指针的别名如person_ptr或其他可能会看到此类型表示指针的情况会更好。