【问题标题】:C syntax about typedef struct pointer, explanation needed关于 typedef 结构指针的 C 语法,需要解释
【发布时间】:2015-01-08 05:30:04
【问题描述】:
typedef struct person *person_t;

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

person* p;

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

person_t p?

谢谢。

【问题讨论】:

  • 那是一个可怜的typedef。你应该使用typedef struct person person_t;。对于指针类型,您应该使用类似于typedef struct person* person_ptr; 的内容。

标签: c pointers syntax struct typedef


【解决方案1】:

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: 我会一直选择后者,我觉得后者更具可读性且不易混淆。 (纯属国际海事组织)

【讨论】:

    【解决方案2】:

    它就像指向结构的指针。

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

    因为你也在类型转换指针。

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

    你可以参考这个link.

    【讨论】:

      【解决方案3】:

      此声明

      typedef struct person *person_t;
      

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

      struct person *p1;
      person_t *p2;
      

      问题是使用标识符person_t 来表示struct person * 类型的指针不是一个好的选择。代码的读者可以认为person_t是结构人本身的别名。例如,最好声明指针的别名,如 person_ptr 或其他可以看出该类型表示指针的东西。

      【讨论】:

      • 等等,最让我困惑的部分是到底是用person_t *p2,还是person_t p2,我们还留着star吗?
      • @ohshire 您在 typedef person_t 中定义,如 struct person *。所以它们是可以互换的。如果你写 person_t * 那么它就等价于 struct person ** 就是指向指针的指针。
      猜你喜欢
      • 2011-01-16
      • 2019-10-02
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多