【问题标题】:Pointer on a struct in CC中结构上的指针
【发布时间】:2014-05-02 13:24:13
【问题描述】:
typedef struct st {
    double d ;
    struct st *n ;
} st, *List ;

关于这部分:

} st, *List ;

第二个“st”是什么?它是创建的对象吗(为什么它与类型具有相同的名称)?我不明白“*列表”。它是否使用 typedef 来表示“List”是指向“st”的指针? 谢谢。

【问题讨论】:

标签: c


【解决方案1】:

部分

typedef struct st {...} st;

创建一个新符号st,可用于声明struct st 的实例,而无需关键字struct。您可以阅读this article 了解更多信息 - 它有一些示例。

第二个声明*List 创建了一个指向struct st 的指针类型,因此您可以声明一个指向结构的指针,而无需编写struct st*

typedef 本质上创建了一个别名,可以用来代替原始类型。

【讨论】:

    【解决方案2】:

    第一个ststruct st 的一部分并创建一个命名结构。第二个sttypedef … st 的一部分,并创建一个类型作为struct st 的别名。 * List 创建一个类型 List 作为指向 struct st 的指针。

    【讨论】:

      【解决方案3】:

      typedef 允许您定义多个类型别名。例如,您可以这样做:

      typedef int Number, *NumberPtr;
      

      这将Number 定义为int 的别名,并将NumberPtr 定义为int* 的别名。

      您的声明也是如此,只是它使用struct st 而不是int。换句话说,它定义了两个类型名称——struct stststruct st*List

      这可以让你写

      st s;
      List p;
      

      而不是

      struct st s;
      struct st *p;
      

      【讨论】:

        【解决方案4】:

        这做了三件事:首先它定义了一个名为struct st 的结构,其中包含一个双精度和一个指向另一个struct st 的指针。第一项任务可以像这样自行完成:

        struct st {
            double d ;
            struct st *n ;
        };
        

        typedef 正在做另外两件事。它将st 定义为struct st,并将List 定义为struct st *。这个 2x typedef 的一个更简单的例子是这样的:

        typedef int Integer, *PointerToInteger;
        

        【讨论】:

          猜你喜欢
          • 2021-07-14
          • 1970-01-01
          • 2016-08-25
          • 1970-01-01
          • 2021-05-03
          • 2021-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多